3

我正在努力解决一个可能很简单的问题。我有一个包含 n 行的 1 列数据框(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 。非常感谢!

4

3 回答 3

2

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

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
于 2021-02-06T12:56:17.367 回答
1

由于整数除法,即%/% 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
于 2021-02-06T13:59:05.300 回答
1

我们可以用gl

library(dplyr)
df %>%
     mutate(col2 = as.integer(gl(n(), 3, n())))
于 2021-02-06T18:04:04.937 回答