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
中指定 each
和 length.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())))
我正在为一个可能很简单的问题而苦苦挣扎。我有一个 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
中指定 each
和 length.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())))