gpt4 book ai didi

r - 如何对存储在列表中的 data.frames 进行子集化?

转载 作者:行者123 更新时间:2023-12-04 10:56:10 24 4
gpt4 key购买 nike

我创建了一个列表,并在每个组件中存储了一个数据框。现在我想过滤那些数据框,只保留特定列中具有 NA 的行。我希望此操作的结果是另一个包含数据框的列表,其中只有那些在该列中具有 NA 的行。

这是一些代码来澄清我在说什么。假设 d1d2是我的数据框

set.seed(1)

d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007))

print(d1)
a b
1.3011543 2006
0.3780023 2006
-0.3101449 2006
-1.3927445 2006
-1.0726218 NA

print(d2)
a b
1 2007
2 2007
3 NA
4 NA
5 2007

我把它放在一个带有 for 循环的列表中
ls<-list()

for (i in 1:2){

str<-paste("d", i, sep="")
dat<-get(str)
ls[[str]]<-dat

}

现在我想过滤每个列表组件,以便只留下包含 NA 的 b 列的行。为此,我尝试使用以下命令,从一开始就知道它会失败。我的问题是我不知道 subset()是要使用的正确函数,如果是,我不知道如何限定每个数据框(即子集函数的第一个元素)
lsNA<-lapply(ls, subset(ls, is.na(b)))

你能帮我克服我的严重限制吗?

最佳答案

lapply的第二个参数是一个函数( subset )和 subset 的额外参数被传递为 ... lapply 的参数.因此:

my.ls <- list(d1 = d1, d2 = d2)
my.lsNA <- lapply(my.ls, subset, is.na(b))

(我还向您展示了如何在不使用 get 的情况下轻松创建 data.frames 列表,并建议您不要使用 ls 作为变量名,因为它也是一个相当常见的函数的名称。)

关于r - 如何对存储在列表中的 data.frames 进行子集化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com