r - 选择匹配 TRUE 的列表列

标签 r

经过一些处理,我有两个列表。目标是仅从列表中获取那些在第二个列表中为 TRUE 的列。

这是一些示例数据:

> first_try
[[1]]
      X1     X2     X3  X4
1 status income verbal sex

[[2]]
      X1     X2     X3     X4
1 status income verbal    sex
2 income verbal    sex status

> second_try
$`1`
     X1    X2    X3   X4
1 FALSE FALSE FALSE TRUE

$`2`
     X1    X2   X3   X4
2 FALSE FALSE TRUE TRUE

所以对于 first 列表,我们只从 [[1]] 中选择 X4 因为它的值是 TRUE[[1]]second 中,从列表 [[2]] 我们只选择 X3,X4 因为它的值为 TRUE,等等。

我认为我可以以某种方式合并这两个列表并尝试以这种方式获得它,但我很难让它发挥作用。

我尝试过的东西:

first <- list()
second <- list()
for(i in 1:length(second_try)){
  second[[i]]<-second_try[[i]] %>% pivot_longer(-c())
  first[[i]]<-first_try[[i]] %>% pivot_longer(-c()) 
}

first %>% mapply(function(x, y)inner_join(x, y, by='name'), second, .)

预期输出:

> first_try
[[1]]
 X4
sex

[[2]]
  X3       X4
verbal     sex
 sex      status

可重现的代码:

first_try<-list(structure(list(X1 = "status", X2 = "income", X3 = "verbal", 
    X4 = "sex"), row.names = 1L, class = "data.frame"), structure(list(
    X1 = c("status", "income"), X2 = c("income", "verbal"), X3 = c("verbal", 
    "sex"), X4 = c("sex", "status")), row.names = 1:2, class = "data.frame"))
second_try<-list(`1` = structure(list(X1 = FALSE, X2 = FALSE, X3 = FALSE, 
    X4 = TRUE), row.names = 1L, class = "data.frame"), `2` = structure(list(
    X1 = FALSE, X2 = FALSE, X3 = TRUE, X4 = TRUE), row.names = 2L, class = "data.frame"))

最佳答案

您可以使用基本 R 中的一行代码来完成此操作。使用 Mapfirst_try 的每个成员子集化为 unlisted second_try 等价位置的成员。

Map(function(a, b) a[unlist(b)], first_try, second_try)
#> [[1]]
#>    X4
#> 1 sex
#> 
#> [[2]]
#>       X3     X4
#> 1 verbal    sex
#> 2    sex status

关于r - 选择匹配 TRUE 的列表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72503132/

相关文章:

r - 美元运算符作为 sapply 的函数参数未按预期工作

javascript - 在 Shiny 中使用自适应分辨率进行缩放/平移

r - 将字符日期 ("01OCT2014") 转换为 R 中的 DATE 格式

r - 如何更改 Shiny 的 actionButton 中标签和图标的顺序?

r - 当 `DT:replaceData()` 在通过 kubernetes 部署的 Shiny 应用程序上时使用 `server=FALSE` 的替代方案

r - 使用 bnlearn 包从贝叶斯网络中删除节点

r - 如何使用 group_by 变量作为 dplyr 的排除值?

r - 具有多个条件的左连接

r - ggplot2:没有标签的刻度线的刻度线更短

r - ddply 用于没有组的整个数据?