0

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

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 使用类中点(关于 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()要计算哪些值?或者是否有另一个函数允许对另一个列表(count unique(data1, data2, data3)在 data1 中)中的值列表进行计数器?

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

4

1 回答 1

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
于 2012-11-05T09:39:08.603 回答