【问题标题】:Add an index (or counter) to a dataframe by group in R [duplicate]在R中按组向数据帧添加索引(或计数器)[重复]
【发布时间】:2015-04-23 06:02:53
【问题描述】:

我有一个喜欢的df

ProjectID Dist
  1        x
  1        y
  2        z
  2        x
  2        h
  3        k
  ....     ....

我想添加第三列,以便我们为每个 ProjectID 设置一个递增计数器:

ProjectID Dist counter
  1        x     1
  1        y     2
  2        z     1
  2        x     2
  2        h     3
  1        k     3
  ....     ....

我查看了seq rank 和其他一些内容,特别想看看我是否可以使用ddply 来提供帮助:

df$counter <- ddply(df,.(projectID), function(x).....? )

我想我可以调整这个答案How to create a counter/numeration by group?,但更喜欢使用 ddply 之类的东西(我找不到 cumsum 的等价物,但我认为这里的原理是一样的:Create ascending series of integers by group in Pandas)。这让我可以在列表中索引出现的事件(例如,在此上合并)。

【问题讨论】:

  • 您可以尝试avedf$counter &lt;- with(df, ave(seq_along(ProjectID), ProjectID, FUN=seq_along)) 或紧凑的包装器将是library(splitstackshape);getanID(df, 'ProjectID')[] 或使用plyr; ddply(df, .(ProjectID), mutate, counter=seq_along(Dist))
  • 好吧,这行得通(谢谢!)但我真的不明白它在做什么? (我的头疼)
  • 我们按ProjectID 分组,并创建一个新列作为每个组的Dist 序列。阅读帮助页面并尝试一些示例后,您会发现它很容易
  • 这是 ave 的使用我(认为)我发现令人困惑 - 我得到了 ddply 的例子(它也很有效,再次感谢)但使用 ave 和 @ 987654339@我正在努力解决问题
  • ave中,第二个参数是分组变量,即`ave(x, ..., FUN = mean)`如果你看描述`...:分组变量,通常因子,所有的“长度”都与“x”相同。您也可以使用ave(ProjectID, ProjectID, FUN=seq_along),但是当您有character/factor 列时,这将导致错误或获取字符元素作为输出。

标签: r indexing counter plyr seq


【解决方案1】:

dplyr 的解决方案非常简单:

library(dplyr)

df %>% group_by(ProjectID) %>% mutate(counter = row_number(ProjectID))


#  ProjectID Dist counter
#1         1    x       1
#2         1    y       2
#3         2    z       1
#4         2    x       2
#5         2    h       3
#6         1    k       3

【讨论】:

  • mutate(counter=row_number()) 应该这样做。
  • 这可能是一个愚蠢的问题...%&gt;% 是做什么的? (有点切题,有没有一种方法可以有效地在 [google] 中搜索该类型的代码?)
  • %&gt;% 是一个管道或链运算符...它的工作方式如下:mydata %&gt;% do_something_with_it %&gt;% do_something_else - 它只是使您能够将函数链接在一起。
  • 啊,太好了,非常有趣 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
相关资源
最近更新 更多