【发布时间】:2015-09-12 10:11:20
【问题描述】:
我有以下数据:
data <- structure(list(user = c(1234L, 1234L, 1234L, 1234L, 1234L, 1234L,
1234L, 1234L, 1234L, 1234L, 1234L, 4758L, 4758L, 9584L, 9584L,
9584L, 9584L, 9584L, 9584L), time = c(1L, 2L, 3L, 4L, 5L, 6L,
7L, 8L, 9L, 10L, 11L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), fruit = structure(c(1L,
6L, 1L, 1L, 6L, 5L, 5L, 3L, 4L, 1L, 2L, 4L, 2L, 1L, 6L, 5L, 5L,
3L, 2L), .Label = c("apple", "banana", "lemon", "lime", "orange",
"pear"), class = "factor"), count = c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), cum_sum = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 1L, 2L, 1L, 2L, 3L,
4L, 5L, 6L)), .Names = c("user", "time", "fruit", "count", "cum_sum"
), row.names = c(NA, -19L), class = "data.frame")
对于这个集合中的每个用户,我想看看随着时间的推移水果的顺序。但是,有些水果会及时“背靠背”列出。
user time fruit count cum_sum
1 1234 1 apple 1 1
2 1234 2 pear 1 2
3 1234 3 apple 1 3
4 1234 4 apple 1 4
5 1234 5 pear 1 5
6 1234 6 orange 1 6
7 1234 7 orange 1 7
我正在寻找的更多的是由 unique 水果按用户划分的时间序列。
问题是,如果我按用户和水果分组然后总结,dplyr 会自动按字母顺序对水果进行排序:
data %>%
group_by(user, fruit) %>%
summarise(temp_var=1) %>%
mutate(cum_sum = cumsum(temp_var))
我真正想要的是,对于上面的用户 1234(例如),按照时间序列的顺序列出水果,但删除所有重复项。所以我们看到苹果 > 梨 > 苹果 > 苹果 > 梨 > 橙 > 橙,我们只会看到苹果 > 梨 > 苹果 > 梨 > 橙
【问题讨论】:
-
您的
dput不起作用,因为它有vars=list(user)而我们没有user。 -
哎呀,很抱歉 - 修复了 dput
-
你想要的输出将梨的
time从5修改为4 -
那么这里的计数是什么意思?你在数什么吗?
-
好的,我更新了预期的结果,因为我认为我粘贴的代码 sn-p 令人困惑。我想要的只是根据时间对每个用户和水果的数据框进行排序。但是,如果它们是背靠背的,我想从该时间序列中删除任何重复的水果(即第 6 行和第 7 行有橙色 > 橙色;我只想将其作为橙色的一个实例)