我正在努力解决一个可能很简单的问题。我有一个包含 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 。非常感谢!
我正在努力解决一个可能很简单的问题。我有一个包含 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 。非常感谢!
您可以在 中指定each和length.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
由于整数除法,即%/% 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())))