已经进行了三次实验,每次实验都在一个数字列表中。
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并将零填充到空白区域?
答案 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