r - 用另一个列表的元素对列表的元素进行子集化

标签 r list subset

假设我有一个包含四个 NA 值的 data.frames 列表:

my.list<-replicate(4,data.frame())
names(my.list)<-paste0("Frame.Number", c(1:4))
for (i in 1:4){
  my.list[[i]]<-mapply(rnorm,10,c(1:4))
  my.list[[i]][i+1,3]<-NA
  my.list[[i]][c(i,i*2),4]<-NA
}

对于每个 data.frames,我想选择第 4 列中不包含 NA 的那些行。例如,我可以创建一个向量列表(?),其中包含有关每个数据帧中案例完整性的信息:

selector <- lapply(my.list,"[",, 4)
selector <- lapply(selector,complete.cases)

现在这就是我陷入困境的地方:如何将 selector 列表应用到 my.list 列表,以便仅选择完整的案例?我以为我可以再次使用 lapply,但我无法找出一些有意义的语法。

最佳答案

我们可以lapply列表,选择第4列并获取非NA值的索引并相应地对矩阵进行子集化。

lapply(my.list,function(x) x[!is.na(x[,4]), ])

#$Frame.Number1
#           [,1]       [,2]     [,3]     [,4]
#[1,]  0.3668229  2.0688573 2.466580 4.339755
#[2,] -0.6391422  3.2635271 2.011809 3.296089
#[3,]  0.8662670  2.2797301 4.838563 4.443876
#[4,] -0.8972108  2.9305257 3.461650 5.525453
#[5,] -0.3452349 -0.2211153 2.570717 3.915671
#[6,]  0.6464616  2.3472838 4.009406 3.436188
#[7,]  0.9341354  2.3092428 2.338770 4.359324
#[8,] -0.5652311  3.2143472 1.944220 4.042566

#$Frame.Number2
#            [,1]      [,2]     [,3]     [,4]
#[1,]  0.22304364 2.6085569 3.459335 2.575920
#[2,] -0.08987518 2.9515099       NA 3.775579
#[3,]  2.03265254 0.9405609 3.266783 4.009509
....

关于r - 用另一个列表的元素对列表的元素进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52363337/

相关文章:

r - 在 R 中使用 stringdist_join() 进行模糊连接,错误 : NAs are not allowed in subscripted assignments

python - 使用循环以表格格式打印列表

c# - C#获取指定月份的所有日期

r - 如何使用 R 中的 purrr 映射函数将 xml-nodesets(使用 rvest 创建)放入小标题中?

r - 只有 .R 文件中的源函数

r - 在现有映射对象中添加或覆盖 aes

c++ - 转换结构化列表 C++ 将列表从一个类传递到另一个类

r - 如何在lm()中子集一个值范围

r - 基于多列隔离数据区域

r - 如何过滤掉不同(未指定)列中包含两个特定字符串的行?