从 R 中的列表中过滤值
Posted
技术标签:
【中文标题】从 R 中的列表中过滤值【英文标题】:Filter values from list in R 【发布时间】:2013-01-24 03:04:16 【问题描述】:我想计算命名数字列表的平均值。我首先要删除 numeric(0)
值。另外,我想检索列表中的哪些元素包含numeric(0)
值。
以下是值的示例:
>r["gg",]
$`01_1_er`
gg
0.5176445
$`02_1_er`
gg
0.4990959
$`03_1_er`
gg
0.5691489
$`22_1_er`
numeric(0)
$`23_1_er`
numeric(0)
$`25_1_er`
gg
0.386304
这是str的结果:
> str(r["gg",])
List of 6
$ 01_1_er: Named num 0.518
..- attr(*, "names")= chr "gg"
$ 02_1_er: Named num 0.499
..- attr(*, "names")= chr "gg"
$ 03_1_er: Named num 0.569
..- attr(*, "names")= chr "gg"
$ 22_1_er: num(0)
$ 23_1_er: num(0)
$ 25_1_er: Named num 0.386
..- attr(*, "names")= chr "gg"
谁能帮忙?
【问题讨论】:
mean(unlist(r["gg",]))
【参考方案1】:
使用基础 R 中的Filter 函数的另一种解决方案:
mean(unlist(Filter(is.numeric, l)))
【讨论】:
Filter()
功能很棒。这似乎应该是公认的答案。
谢谢,R 文档真的很混乱,有很多来自不同包的过滤器函数,你找不到基本语言 rdocumentation.org/search?q=Filter 的那个。也许应该有只针对该语言的文档,而不是每个可能的库。【参考方案2】:
## Example list
l <- list(n1=numeric(0), n2="foo", n3=numeric(0), n4=1:5)
## Filter out elements with length 0
l[lapply(l, length) > 0]
$n2
[1] "foo"
$n4
[1] 1 2 3 4 5
## Get names of elements with length 0
names(l)[lapply(l, length) == 0]
[1] "n1" "n3"
【讨论】:
我真的很喜欢这个解决方案。但我也必须按照詹姆斯的建议来计算平均值。我认为您的两个答案的组合将起作用。【参考方案3】:取消列出将仅提取单个向量中的数字条目,您可以将其称为均值,因此请尝试:
mean(unlist(r["gg",]))
【讨论】:
进一步搜索导致我得到类似的答案。但是我没有得到原始名称,也没有得到删除的元素。我认为您和 juba'a 答案的结合将解决我的问题。以上是关于从 R 中的列表中过滤值的主要内容,如果未能解决你的问题,请参考以下文章