亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建連續值的組名

創建連續值的組名

至尊寶的傳說 2019-11-20 11:02:32
看起來很容易完成,無法找到更簡單的方法。我在x下面有一個向量,需要為連續的值創建組名。我的嘗試是使用rle,更好的主意?# datax <- c(1,1,1,2,2,2,3,2,2,1,1)# make groupsrep(paste0("Group_", 1:length(rle(x)$lengths)), rle(x)$lengths)# [1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4"# [9] "Group_4" "Group_5" "Group_5"
查看完整描述

3 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

使用diff和cumsum:


paste0("Group_", cumsum(c(1, diff(x) != 0)))

#[1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4" "Group_4" "Group_5" "Group_5"

(如果您的值是浮點值,則可能必須避免!=使用,而是使用公差。)


查看完整回答
反對 回復 2019-11-20
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

groupdata2中的group()可以使用l_starts方法根據組起點列表創建組。通過設置n為auto,它會自動查找組開始:


x <- c(1,1,1,2,2,2,3,2,2,1,1)

groupdata2::group(x, n = "auto", method = "l_starts")


## # A tibble: 11 x 2

## # Groups:   .groups [5]

##     data .groups

##    <dbl> <fct>  

##  1     1 1      

##  2     1 1      

##  3     1 1      

##  4     2 2      

##  5     2 2      

##  6     2 2      

##  7     3 3      

##  8     2 4      

##  9     2 4      

## 10     1 5      

## 11     1 5     

還有一個differs_from_previous()函數可以找到與先前值相差某個閾值的值或值的索引。


# The values to start groups at

differs_from_previous(x, threshold = 1,

                      direction = "both")

## [1] 2 3 2 1


# The indices to start groups at

differs_from_previous(x, threshold = 1,

                      direction = "both",

                      return_index = TRUE)

## [1] 4 7 8 10


查看完整回答
反對 回復 2019-11-20
  • 3 回答
  • 0 關注
  • 635 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號