计算数字的出现次数以及它在R data.frame和data.table中的出现次数

时间:2014-12-27 13:26:53

标签: r dataframe data.table

我刚开始学习R,所以我的问题可能完全荒谬。我有一个数据框

data<- data.frame('number'=1:11, 'col1'=sample(10:20),'col2'=sample(10:20),'col3'=sample(10:20),'col4'=sample(10:20),'col5'=sample(10:20), 'date'= c('12-12-2014','12-11-2014','12-10-2014','12-09-2014', '12-08-2014','12-07-2014','12-06-2014','12-05-2014','12-04-2014', '12-04-2014', '12-03-2014') )

数字列是'id'列,最后一列是日期。 我想计算每个数字出现的次数(不是每列,但包含数据的整个数据帧)列2:6以及它们何时出现。 我在第一部分上遇到了使用data.table:

尝试了以下内容
count <- function(){
    i = 1
    DT <-data.table(data[2:6])

    for (i in 10:20){
        DT[, .N, by =i]
        i = i + 1
    }

}

给出了一个我无法理解的错误

    Error in `[.data.table`(DT, , .N, by = i) : 
  The items in the 'by' or 'keyby' list are length (1). Each must be same length as rows in x or number of rows returned by i (11)

请有人帮忙。还有第二部分,我还没有尝试过,即将日期或行号与每次出现的数字相关联

1 个答案:

答案 0 :(得分:1)

也许你可能想要这个

library(reshape2)
table(melt(data[,-1], id.var='date')[,-2])
#            value
#date         10 11 12 13 14 15 16 17 18 19 20
#  12-03-2014  0  0  1  0  0  1  0  0  1  2  0
#  12-04-2014  2  0  0  2  2  0  1  0  1  1  1
#  12-05-2014  0  0  0  0  0  0  1  1  2  0  1
#  12-06-2014  1  1  0  0  0  1  0  1  0  0  1
#  12-07-2014  0  1  0  1  0  1  1  1  0  0  0
#  12-08-2014  1  1  0  0  1  0  0  1  1  0  0
#  12-09-2014  0  0  2  0  1  2  0  0  0  0  0
#  12-10-2014  0  0  1  1  0  0  1  0  0  1  1
#  12-11-2014  0  1  1  0  0  0  1  0  0  1  1
#  12-12-2014  1  1  0  1  1  0  0  1  0  0  0

或者如果您需要data.table解决方案(来自@ Arun的评论)

library(data.table)
dcast.data.table(melt(setDT(data),
           id="date", measure=2:6), date ~ value)