dplyr:在数据帧中用 n 次连续重复整数改变新列

dplyr: Mutate a new column with sequential repeated integers of n time in a dataframe

我正在为一个可能很简单的问题而苦苦挣扎。我有一个 1 列 n 行的数据框(n 是 3 的倍数)。我想在第二列中添加整数,例如:1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,.. 我怎样才能实现这一点dplyr 作为不同行长的通用解决方案(都是 3 的倍数)。

我试过这个:

df <- tibble(Col1 = c(1:12)) %>% 
  mutate(Col2 = rep(1:4, each=3))

这行得通。但我想有一个 n 行的解决方案,每个 = 3 。非常感谢!

您可以在 rep 中指定 eachlength.out 参数。

library(dplyr)

tibble(Col1 = c(1:12)) %>% 
  mutate(Col2 = rep(row_number(), each=3, length.out = n()))

#    Col1  Col2
#   <int> <int>
# 1     1     1
# 2     2     1
# 3     3     1
# 4     4     2
# 5     5     2
# 6     6     2
# 7     7     3
# 8     8     3
# 9     9     3
#10    10     4
#11    11     4
#12    12     4

作为整数除法,即 %/% 3 在一个序列上说 0:n 将导致 0, 0, 0, 1, 1, 1, ... 加 1 将自动生成所需的序列,所以简单地这也可以做到

df %>% mutate(col2 = 1+ (row_number()-1) %/% 3)

# A tibble: 12 x 2
    Col1  col2
   <int> <dbl>
 1     1     1
 2     2     1
 3     3     1
 4     4     2
 5     5     2
 6     6     2
 7     7     3
 8     8     3
 9     9     3
10    10     4
11    11     4
12    12     4

我们可以使用gl

library(dplyr)
df %>%
     mutate(col2 = as.integer(gl(n(), 3, n())))