根据“调整后的 group_by”创建一列 - R
Posted
技术标签:
【中文标题】根据“调整后的 group_by”创建一列 - R【英文标题】:Create a column based on "adjusted group_by" - R 【发布时间】: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”,我希望将它返回到第一位。但我真的很感激,因为第二个它会解决问题而且很简单!非常感谢!!
【参考方案1】:
如果您按名称和 id 分组,这将为您提供唯一的 id。这不是您指定的确切顺序,但这会起作用。
library(dplyr)
df <- tibble(
name = c("Jose","Jose", "Maria","Maria","Jose","Jose","Jose")) |>
mutate(id = cumsum(ifelse(name != lag(name) | is.na(lag(name)), 1, 0)))
【讨论】:
非常感谢!!对此,我真的非常感激!!这就是我需要的!以上是关于根据“调整后的 group_by”创建一列 - R的主要内容,如果未能解决你的问题,请参考以下文章
SpatialPolygons - 在 R 中从坐标创建一组多边形