【问题标题】:Adding a counter column for a set of similar rows in R [duplicate]为R中的一组相似行添加一个计数器列[重复]
【发布时间】:2013-11-07 22:52:42
【问题描述】:

我在 R 中有一个包含两列的数据框。第一列包含主题 ID,第二列包含主题完成的试验 ID。

特定的 subjectID 可能已经进行了 1 次以上的试验。我想添加一个带有计数器的列,该计数器开始为每个主题试验的唯一值计数并递增 1,直到它到达发生该事件的最后一行。

更准确地说,我有这张桌子:

ID T
A  1
A  1
A  2
A  2
B  1
B  1
B  1
B  1

我想要以下输出

ID  T  Index
A   1   1
A   1   2
A   2   1
A   2   2
B   1   1
B   1   2
B   1   3
B   1   4

【问题讨论】:

  • ...还有很多很多其他的。
  • 嗨,欢迎来到 SO。由于您是新手,您可能需要阅读网站的aboutFAQ 部分,以帮助您充分利用它。如果某个答案确实解决了您的问题,您可能需要考虑投票和/或将其标记为已接受,以表明问题已得到回答,方法是勾选合适答案旁边的绿色小复选标记。您没有义务这样做,但它有助于保持网站没有未回答的问题,并奖励那些花时间解决您的问题的人。
  • 感谢您告诉我。但是从昨天开始,我一直在尝试对您的答案进行投票。但它不允许我这样做。我的声望分数仍然

标签: r


【解决方案1】:

我真的很喜欢 data.table 的简单语法(更不用说速度了)...

#  Load package
require( data.table )
#  Turn data.frame into a data.table
dt <- data.table( df )

#  Get running count by ID and T
dt[ , Index := 1:.N , by = c("ID" , "T") ]
#   ID T Index
#1:  A 1     1
#2:  A 1     2
#3:  A 2     1
#4:  A 2     2
#5:  B 1     1
#6:  B 1     2
#7:  B 1     3
#8:  B 1     4

.N 是一个整数,等于每组中的行数。这些组由by 参数中的列名定义,因此1:.N 给出了一个与组一样长的向量。

由于data.table 继承自data.frame,任何将data.frame 作为输入的函数也将data.table 作为输入,您可以根据需要轻松转换回来(df &lt;- data.frame( dt )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多