【问题标题】:counting the occurrences of a number and when it occurred in R data.frame and data.table计算一个数字的出现次数以及它出现在 R data.frame 和 data.table 中的时间
【发布时间】:2014-12-27 13:26:52
【问题描述】:

我刚开始学习 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)

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

【问题讨论】:

    标签: r dataframe data.table


    【解决方案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 的 cmets)

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

    【讨论】:

    • 感谢您的帮助。你能推荐一本以结构化方式学习 R 的好书吗?
    • @user1478335 我会查看coursera 了解任何在线课程。关于书籍,列出了一些 stackoverflow.com/questions/1744861/… 与任何编程语言一样,实践是关键。
    • 我会尽量避免使用table(),并做到:dcast.data.table(melt(setDT(data), id="date", measure=2:6), date ~ value)
    • 当然!这是一个语法上很棒的函数,但是扩展性很差:-(。顺便说一句,从 data.table 的下一个版本开始,我们可以直接使用dcast()...不需要.data.table
    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多