在r

时间:2018-09-05 13:02:10

标签: r data.table cbind

我正在使用R 3.5.1

我认为这是一个简单的问题,但是我对R并不是很熟悉。

我有一个看起来像这样的data.frame对象

COL1  COL2  COL3
A     blah  3
A     abc   4
A     def   42
B     xyz   10
B     aaa   3
C     pdq   19

我想将data.table转换成这样

COLA  COLACount  COLB  COLBCount  COLC COLCCount 
blah  3          xyz   10         pdq  19   
abc   4          aaa   3
def   42

我不确定从哪里开始(或称呼它)。 我考虑过要做以下事情:

  • 获取COL1中的所有唯一值
  • 使用COL2和COL3的内容为COL1中的每个唯一值分别创建一个数据表。
  • 将每个data.table绑定到一个“宽”表中。

但是我感觉可能会有简化程序的r包/方法。

谢谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

cbind.fill <- function(...){
    nm <- list(...)
    nm <- lapply(nm, as.matrix)
    n <- max(sapply(nm, nrow))
    do.call(cbind, lapply(nm, function (x)
        rbind(x, matrix(, n-nrow(x), ncol(x)))))
} #code from package rowr

do.call(cbind.fill, split(dt, dt$COL1))