#r #list #dataframe #tidyverse
Вопрос:
У меня есть список кадров данных:
df1 lt;- data.frame(c(1:5), c(6:10)) df2 lt;- data.frame(c(1:7)) df3 lt;- data.frame(c(1:5), c("a", "b", "c", "d", "e")) my_list lt;- list(df1, df2, df3)
Из моего списка я хочу извлечь фреймы данных, которые имеют только 2 столбца (df1 и df3), и поместить их в новый список.
Ответ №1:
Может быть, ты сможешь попробовать lengths
gt; my_list[lengths(my_list) == 2] [[1]] c.1.5. c.6.10. 1 1 6 2 2 7 3 3 8 4 4 9 5 5 10 [[2]] c.1.5. c..a....b....c....d....e.. 1 1 a 2 2 b 3 3 c 4 4 d 5 5 e
Ответ №2:
Также можно использовать подмножество lapply
и логическое условие ( sapply
также будет работать):
my_list[lapply(my_list, ncol) == 2]
[[1]] c.1.5. c.6.10. 1 1 6 2 2 7 3 3 8 4 4 9 5 5 10 [[2]] c.1.5. c..a....b....c....d....e.. 1 1 a 2 2 b 3 3 c 4 4 d 5 5 e
Ответ №3:
Мы могли бы использовать keep
из purrr
пакета с условием:
library(purrr) my_list %gt;% keep(~ ncol(.x) == 2)
[[1]] c.1.5. c.6.10. 1 1 6 2 2 7 3 3 8 4 4 9 5 5 10 [[2]] c.1.5. c..a....b....c....d....e.. 1 1 a 2 2 b 3 3 c 4 4 d 5 5 e