Select 列出匹配 TRUE 的列
Select list columns that match TRUE
经过一些处理,我有两个列表。 objective 仅从第二个列表中的 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]]
select X4
因为它在 second
中有一个值 TRUE
[[1]]
,而从列表 [[2]]
中我们只 select 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 中的一行代码来完成此操作。使用 Map
将 first_try
的每个成员子集化为 unlist
ed 成员在 [ 的等效位置=14=].
Map(function(a, b) a[unlist(b)], first_try, second_try)
#> [[1]]
#> X4
#> 1 sex
#>
#> [[2]]
#> X3 X4
#> 1 verbal sex
#> 2 sex status
经过一些处理,我有两个列表。 objective 仅从第二个列表中的 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]]
select X4
因为它在 second
中有一个值 TRUE
[[1]]
,而从列表 [[2]]
中我们只 select 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 中的一行代码来完成此操作。使用 Map
将 first_try
的每个成员子集化为 unlist
ed 成员在 [ 的等效位置=14=].
Map(function(a, b) a[unlist(b)], first_try, second_try)
#> [[1]]
#> X4
#> 1 sex
#>
#> [[2]]
#> X3 X4
#> 1 verbal sex
#> 2 sex status