【发布时间】:2020-12-16 16:01:33
【问题描述】:
似乎是一个简单的数据操作问题,但是我们希望避免使用只比较每一行中的值的 for 循环。我们有以下数据框:
zed = data.frame(
a = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1),
b = c('a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'e', 'e', 'a', 'a'),
c = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 1, 1),
stringsAsFactors = FALSE
)
output = zed = data.frame(
a = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1),
b = c('a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd', 'd', 'd', 'd', 'e', 'e', 'a', 'a'),
c = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 1, 1),
group = c(1, 1, 2, 2, 2, 3, 4, 5, 6, 6, 6, 7, 8, 8, 9, 9),
stringsAsFactors = FALSE
)
> output
a b c group
1 1 a 1 1
2 1 a 1 1
3 1 b 1 2
4 1 b 1 2
5 1 b 1 2
6 1 c 1 3
7 1 c 2 4
8 1 d 2 5
9 2 d 2 6
10 2 d 2 6
11 2 d 2 6
12 2 d 3 7
13 2 e 3 8
14 2 e 3 8
15 1 a 1 9
16 1 a 1 9
数据框以a、b、c 列开头,我们需要将group 列添加到数据框中。 group 列从 1 开始,如果 a、b、c 中的任何值与上一行中的值不同,则依次增加。
这并不像在 a、b、c 上执行 group_by() 那样简单,因为同一行可以稍后出现,但不是按顺序出现在数据框中(例如,第 1,2 行 = = 第 15,16 行,但它们不一样 group 因为它们没有按顺序出现在数据框中)。
【问题讨论】:
标签: r dplyr data-manipulation