【发布时间】:2021-11-09 18:40:09
【问题描述】:
我有一个包含足球俱乐部教练姓名的数据框。 有时,一段时间后,同一位教练在过去被解雇后回到球队。 如果我使用 group_by,则输出 df 会将两个教练聚合为同一组。 但是,我希望这会创建不同的组。我不知道我是否说清楚了,但我认为这个例子会比我的文字提供更好的解释:D
如果有包或其他功能可以做到这一点,没问题!
提前致谢!
例子
library(dplyr)
df <- tibble(
name = c("Jose","Jose", "Maria","Maria","Jose","Jose","Jose")
)
#Desired Output
adjusted_df <- tibble(
name = c("Jose","Jose", "Maria","Maria","Jose","Jose","Jose"),
number = c(1,1,1,1,2,2,2)
)
# I think after this desired output, I could group by name and number
【问题讨论】:
-
df$number <- cumsum(df$name != lag(df$name) & duplicated(df$name)) + 1之类的内容是否与您要查找的内容相近?或者您是否会考虑仅在name中分配一个具有唯一 ID 的更改,例如使用data.table的df$number <- rleid(df$name)?在后一种情况下,您还可以将group_by与name和number结合使用... -
非常感谢!两种解决方案都会有所帮助!第二个,使用 data.table,它非常简单且有用。在第一个中,唯一的限制是,如果在 Jose 之后包含一个新名称,例如“Pedro”,我希望将它返回到第一位。但我真的很感激,因为第二个它会解决问题而且很简单!非常感谢!!