首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将R中数据表中的连续行分组

将R中数据表中的连续行分组
EN

Stack Overflow用户
提问于 2018-12-19 18:56:59
回答 4查看 355关注 0票数 2

我找不到解决这个简单问题的办法。我有这样一个数据框架:

代码语言:javascript
复制
df = data.table(X1 = 1:12, X2 = LETTERS[1:12])

我想要创建一个名为group的新变量,其中我希望将连续的行按3分组,例如:第1-3行将是group0,第4-6行将是group2等等。

预期结果:

代码语言:javascript
复制
    X1 X2 group
 1:  1  A     0
 2:  2  B     0
 3:  3  C     0
 4:  4  D     1
 5:  5  E     1
 6:  6  F     1
 7:  7  G     2
 8:  8  H     2
 9:  9  I     2
10: 10  J     3
11: 11  K     3
12: 12  L     3
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-19 19:16:24

Mod运算符%/%是一种简单的方法,可以这样做:

代码语言:javascript
复制
df[, group := (1:.N - 1) %/% 3]
df
#    X1 X2 group
# 1:  1  A     0
# 2:  2  B     0
# 3:  3  C     0
# 4:  4  D     1
# 5:  5  E     1
# 6:  6  F     1
# 7:  7  G     2
# 8:  8  H     2
# 9:  9  I     2
#10: 10  J     3
#11: 11  K     3
#12: 12  L     3
票数 8
EN

Stack Overflow用户

发布于 2018-12-19 19:08:17

您也可以使用rep

代码语言:javascript
复制
df[, group := rep(1:(.N / 3) - 1, each = 3)]
df
#    X1 X2 group
# 1:  1  A     0
# 2:  2  B     0
# 3:  3  C     0
# 4:  4  D     1
# 5:  5  E     1
# 6:  6  F     1
# 7:  7  G     2
# 8:  8  H     2
# 9:  9  I     2
#10: 10  J     3
#11: 11  K     3
#12: 12  L     3
票数 5
EN

Stack Overflow用户

发布于 2018-12-19 19:14:06

这是一种方法。

代码语言:javascript
复制
consecutive_groups <- function(df, group_length = 3) {
  n_groups <- if_else(nrow(df) %% group_length == 0L, 
                      nrow(df) / group_length, 
                      as.integer(nrow(df) / group_length) + 1 )
  df %>% mutate(row_number = row_number(), 
                group = ntile(row_number, n_groups) - 1) %>% 
         select(-row_number)
}




 consecutive_groups(df, 3)
   #     X1 X2 group
   # 1   1  A     0
   # 2   2  B     0
   # 3   3  C     0
   # 4   4  D     1
   # 5   5  E     1
   # 6   6  F     1
   # 7   7  G     2
   # 8   8  H     2
   # 9   9  I     2
   # 10 10  J     3
   # 11 11  K     3
   # 12 12  L     3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53857580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档