【问题标题】:Get frequency of data.table value in other data.table and add to current data.table获取其他data.table中data.table值的频率并添加到当前data.table
【发布时间】:2015-01-28 02:21:02
【问题描述】:
library(data.table)
DT1 <- data.table(id = 1:6, junk = c("T", "U", "V", "X", "Y", "Z"),
                  type = c("A", "B", "B", "B", "A", "C"))
DT2 <- data.table(id = 4:6, junk = c("X", "Y", "Z"),
                  type = c("B", "A", "C"))

也就是说,

> DT1
   id junk type
1:  1    T    A
2:  2    U    B
3:  3    V    B
4:  4    X    B
5:  5    Y    A
6:  6    Z    C

> DT2
   id junk type
1:  4    X    B
2:  5    Y    A
3:  6    Z    C

我想在DT2 中添加一列frequency,它给出DT1 中任何给定type 的出现次数。换句话说,结果应该是这样的:

> DT2
   id junk type frequency
1:  4    X    B         3
2:  5    Y    A         2
3:  6    Z    C         1

(这似乎与Check frequency of data.table value in other data.table有些关系,但在这种情况下,这可以通过加入另一个方向来完成。在这种情况下,生成的数据表应该基于DT2。)

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    试试吧:

       help<-DT1[,list(frequency=.N),by=type]
       setkey(help, type)
       setkey(DT2, type)
       DT2[help]
       #   type id junk frequency
       #1:    A  5    Y         2
       #2:    B  4    X         3
       #3:    C  6    Z         1
    

    【讨论】:

      【解决方案2】:
       DT1[,frequency:=.N,by=type]
       setkeyv(DT1, colnames(DT1)[-4])
       DT1[DT2]
       #  id junk type frequency
       #1:  4    X    B         3
       #2:  5    Y    A         2
       #3:  6    Z    C         1
      

      假设你的DT1

       DT1 <- data.table(id = 1:5, junk = c("T", "U", "V", "X", "Y"),
                    type = c("A", "B", "B", "B", "A"))
      

      使用上面的代码,给出

       DT1[DT2]
       #   id junk type frequency
       #1:  4    X    B         3
       #2:  5    Y    A         2
       #3:  6    Z    C        NA
      

      【讨论】:

        猜你喜欢
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 2019-04-17
        • 1970-01-01
        相关资源
        最近更新 更多