在R中将不同长度的数据帧合并为唯一值(或计数次数)?

时间:2012-11-05 09:10:35

标签: r list count dataframe histogram

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

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并将零填充到空白区域?

1 个答案:

答案 0 :(得分:2)

这将生成数据框:

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