提问人:Sulz 提问时间:1/20/2023 最后编辑:zx8754Sulz 更新时间:1/20/2023 访问量:81
从包含某些列的列表中提取所有数据帧
Extract all dataframes from a list which contains certain columns
问:
我有一个这样的列表:
Name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
Age <- c(23, 41, 32, 58, 26)
Hight <- c(13, 41, 32, 58, 26)
Weight <- c(11,43,23,43,123)
df1 <- data.frame(Name, Age, Hight, Weight)
df2 <- data.frame(Name, Age, Hight)
df3<- data.frame(Name, Age, Weight)
l <- list(df1, df2, df3)
我现在想提取所有数据帧(或数据帧的名称),其中包含 Hight 和 Weight 列。
在这种情况下,预期输出将list(df1)
答:
4赞
Mohamed Desouky
1/20/2023
#1
您可以使用此
l <- list(df1, df2, df3)
l[sapply(l , \(x) all(c('Weight', 'Hight') %in% colnames(x)))]
- 输出
[[1]]
Name Age Hight Weight
1 Jon 23 13 11
2 Bill 41 41 43
3 Maria 32 32 23
4 Ben 58 58 43
5 Tina 26 26 123
评论
2赞
benson23
1/20/2023
您可以使用跳过该步骤sapply
unlist
6赞
Ben
1/20/2023
或者可以试试Filter(\(x) all(c("Hight", "Weight") %in% names(x)), l)
0赞
zx8754
1/20/2023
@Ben这可能是一个单独的答案。
0赞
Rodrigo Lustosa
1/20/2023
#2
一种可能的方法是使用循环:for
dfs <- list(df1, df2, df3)
n <- length(dfs)
index <- NULL # index of dataframes to be used
for (i in 1:n){
if ("Hight" %in% names(dfs[[i]]) & "Weight" %in% names(dfs[[i]]))
index <- c(index, i)
}
dfs[index]
0赞
Andrea Barghetti
1/20/2023
#3
df_list <- list(df1, df2, df3)
have_all_columns <- purrr:::map_lgl(df_list, ~all(c( "Hight", "Weight") %in% names(.x)))
df_list[have_all_columns]
1赞
margusl
1/20/2023
#4
咕噜keep()
discard()
dfs <- list(df1, df2, df3)
purrr::keep(dfs, ~ all(c("Hight", "Weight") %in% colnames(.x)))
#> [[1]]
#> Name Age Hight Weight
#> 1 Jon 23 13 11
#> 2 Bill 41 41 43
#> 3 Maria 32 32 23
#> 4 Ben 58 58 43
#> 5 Tina 26 26 123
评论