查找列表中的元素数

时间:2019-12-01 20:52:50

标签: r list count

我正在使用一个数据集,该数据集的一个列已变成如下所示的列表:

[[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。有人可以建议一个可以提供帮助的函数吗?谢谢。

2 个答案:

答案 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)

除了@dc37的现有解决方案之外,您还可以将以下内容与lengths()一起使用

lengths(v)

如果您不想考虑NA,请尝试

lengths(v)*!is.na(v)