Подмножество из списка кадров данных в R

#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