我正在使用一个数据集,该数据集的一个列已变成如下所示的列表:
[[997]]
[1] NA
[[998]]
[1] "0.99" " 0.99" " 0.99" " 0.99" " 0.99" " 2.99"
[[999]]
[1] "19.99" " 9.99" " 4.99" " 79.99" " 15.99" " 14.99" " 99.99" " 7.99"
[9] " 59.99" " 49.99"
[[1000]]
[1] NA
我需要计算列表的每个元素中有多少个组件,并将这些值保存在矩阵中。例如,在999中,输出应为10,在1000中,输出应为0。有人可以建议一个可以提供帮助的函数吗?谢谢。
答案 0 :(得分:3)
在这里,使用清单v
的一个小例子:
v = vector("list",4)
v[[1]] = 1:5
v[[2]] = 1:50
v[[3]] = NA
> v
[[1]]
[1] 1 2 3 4 5
[[2]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50
[[3]]
[1] NA
[[4]]
NULL
您可以通过执行以下操作获得计数:
l = unlist(lapply(v,length))
和
> l
[1] 5 50 1 0
如果您不想算作NA
l = unlist(lapply(v,function(x)length(x[!is.na(x)])))
您会得到:
> l
[1] 5 50 0 0
编辑:来自@markus和@ A5C1D2H2I1M1N2O1R2T1评论
如@markus所述,您可以通过执行以下操作来简化很多事情:
> lengths(v)
[1] 5 50 1 0
正如@ A5C1D2H2I1M1N2O1R2T1所述,您可以执行以下操作来消除NA计数:
> replace(lengths(v), is.na(v), 0)
[1] 5 50 0 0
答案 1 :(得分:2)