【问题标题】:Using transform and plyr to add a counting column in R使用 transform 和 plyr 在 R 中添加计数列
【发布时间】:2014-03-24 18:16:55
【问题描述】:

我有一个两级数据集(比如说嵌套在学校中的类)并且数据集已编码

像这样:

School  Class
  A       1
  A       1
  A       2
  A       2
  B       1
  B       1
  B       2
  B       2

但要运行分析,我需要数据具有唯一的班级 ID,无论学校成员身份如何。

School  Class  NewClass
  A       1       1
  A       1       1
  A       2       2
  A       2       2
  B       1       3
  B       1       3
  B       2       4
  B       2       4 

我尝试使用 transform 和 ddply,但我不确定如何让 NewClass 为 School 和 Class 的每个组合不断增加。我可以想到一些不优雅的方法来做到这一点,但我确信有很多简单的解决方案我现在想不出。任何帮助将不胜感激!

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    使用interaction 创建一个因子,然后将其强制为整数:

    transform(dat,nn = as.integer(interaction(Class,School)))
      School Class nn
    1      A     1  1
    2      A     1  1
    3      A     2  2
    4      A     2  2
    5      B     1  3
    6      B     1  3
    7      B     2  4
    8      B     2  4
    

    【讨论】:

      【解决方案2】:

      使用data.table:

      library(data.table)
      dt = as.data.table(your_df)
      
      dt[, NewClass := .GRP, by = list(School, Class)]
      dt
      #   School Class NewClass
      #1:      A     1        1
      #2:      A     1        1
      #3:      A     2        2
      #4:      A     2        2
      #5:      B     1        3
      #6:      B     1        3
      #7:      B     2        4
      #8:      B     2        4
      

      .GRP 只是一个组计数器。另请注意,您实际上并不需要这样做,并且可以在您需要执行的任何 by 操作中继续使用上述组合 list(School, Class)


      请注意,从 data.table 版本 >= 1.9.0 导出的函数 setDT 通过引用将 data.frame 转换为 data.table(不复制),以防您想坚持使用数据.tables。

      require(data.table) ## >= 1.9.0
      setDT(your_df)      ## your_df is now a data.table, changed by reference.
      

      【讨论】:

      • @Arun 谢谢,我需要把它添加到我的词汇表中(我认为你的意思是 *now 而不是 not)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 2019-10-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多