【问题标题】:Merge dataframes of different length at unique values (or count number occourrences) in R?在 R 中以唯一值(或计数出现次数)合并不同长度的数据帧?
【发布时间】:2012-11-05 09:10:35
【问题描述】:

进行了三个实验,每个实验都在一个数字列表中。

data1 = c(1,1,1,2,2)
data2 = c(2,2,3,3,3,4)
data3 = c(1,1,1,4,4,4,4,4,4, 5, 6)

现在我想计算每个实验中每个数字的出现次数。我用table 来做这件事,因为 hist 使用类 mids(关于 histo 的好处是,我可以给它唯一值的列表)

# save histograms
result = list()
result$values[[1]] = as.data.frame(table(data1), stringsAsFactors=F)
result$values[[2]] = as.data.frame(table(data2), stringsAsFactors=F)
result$values[[3]] = as.data.frame(table(data3), stringsAsFactors=F)

str(result)

现在我只有一个不同长度的数据框列表,但我想要一个包含相同长度列表的数据框(我想减去它们)

nerv=data.frame(names=c(1, 2, 3, 4, 5, 6))
nerv[[2]] = c(3, 2, 0, 0, 0, 0)
nerv[[3]] = c(0, 2, 3, 1, 0, 0)
nerv[[4]] = c(3, 0, 0, 6, 1, 1)

是否有可能告诉table(),要计算哪些值?或者是否有另一个函数允许对另一个列表中的值列表进行计数器(data1 中的count unique(data1, data2, data3))?

或者我应该合并 data.frames 并将零填充到空白处?

【问题讨论】:

    标签: r list count dataframe histogram


    【解决方案1】:

    这将生成数据框:

    lev <- unique(c(data1, data2, data3)) # the unique values
    
    data.frame(names = lev,
               do.call(cbind,
                       lapply(list(data1, data2, data3),
                              function(x) table(factor(x, levels = lev)))))
    

    诀窍是将数值向量转换为具有指定水平的因子。函数table 使用所有级别。

    输出:

      names X1 X2 X3
    1     1  3  0  3
    2     2  2  2  0
    3     3  0  3  0
    4     4  0  1  6
    5     5  0  0  1
    6     6  0  0  1
    

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2020-04-10
      • 2019-02-27
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多