根据“调整后的 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 &lt;- cumsum(df$name != lag(df$name) &amp; duplicated(df$name)) + 1 之类的内容是否与您要查找的内容相近?或者您是否会考虑仅在 name 中分配一个具有唯一 ID 的更改,例如使用 data.tabledf$number &lt;- rleid(df$name)?在后一种情况下,您还可以将group_bynamenumber 结合使用... 非常感谢!两种解决方案都会有所帮助!第二个,使用 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的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:通过从列表的字典映射创建一列

通过迭代另一列来创建一列

在 Flutter 中动态创建一列行的好方法是啥

SpatialPolygons - 在 R 中从坐标创建一组多边形

如何创建一列数组,其值来自一列并且它们的长度来自pyspark数据帧中的另一列?

如何在一个包含多个 matplotlib 直方图的图中设置 x 轴的边界并只创建一列图?