我有1000行和10000列的大型数据集。我用下面的代码举一个简短的例子:
V1 = c(1,2,1,1,NA,1,0,2,2,1,0)
V2 = c(0,2,NA,2,1,2,0,1,NA,0,0)
V3 = c(3,1,1,1,NA,1,0,2,2,1,2)
V4 = c(1,2,NA,1,0,2,0,2,NA,2,0)
datos =data.frame(cbind(V1,V2,V3,V4))
我的每一列都有值=“ 0”,“ 1”或“ 2”。我需要获得每列中“ 0”和“ 1”的频率。请注意,数据集也具有“ NA”值,在估算频率时我不必考虑这些值。
例如,对于V1,“ 0”的频率为= 2/10 = 0.2,而“ 1”的频率为= 5/10 = 0.5。因此,总和为0,2 + 0,5 = 0,7。
我认为apply(datos, 2, x)
会有所帮助,但我不确定function (x)
会如何。
有人知道解决此问题的方法吗?
谢谢
replace
设为table
,获得频率,然后通过prop.table
转换成比例]]sapply(datos, function(x) prop.table(table(replace(x, !x %in% 0:1, NA))))