Выберите только элементы списка, содержащего таблицы с двумя столбцами в R

#r #list

#r #Список

Вопрос:

У меня есть список, содержащий 10000 элементов, каждый элемент содержит таблицу с разным количеством столбцов, пример списка (с меньшим количеством элементов) показан ниже. Есть ли способ выбрать только элементы с двумя столбцами в дополнительном списке, но показывать только цифры, а не символы (как в примере [[1]] )?

 $`1`

  a   g 
 41 498 

$`2`

  c   t  g
 40 499  1

$`3`

  a   c   g   t 
 28  36 466   9 

$`4`

  t 
539 
  

Ожидаемый результат будет:

 $`1`

41 498
  

Знаете ли вы какое-либо решение?

Комментарии:

1. У вас есть table объект или data.frame или просто названный вектор в качестве list элемента

2. он просто называется vector, спасибо за ваш ответ.

Ответ №1:

Мы можем использовать lengths для создания логического вектора для подмножества list , затем перебирать подмножество list и unname или преобразовывать в vector с as.vector помощью или unlist (если это data.frame)

 lapply(lst1[lengths(lst1) == 2], unname)
#$`1`
#[1]  41 498
  

Если они находятся data.frame в list

 lapply(lst1[sapply(lst1, ncol) == 2], unlist, use.names = FALSE)
  

данные

 lst1 <- list(`1` = c(a = 41, g = 498), `2` = c(c = 40, t = 499, g = 1
), `3` = c(a = 28, c = 36, g = 466, t = 9), `4` = c(t = 539))
  

Ответ №2:

Здесь я использую lapply, чтобы найти, какие длины равны 2, а затем индексировать.

пусть L будет вашим списком

L[lapply(L,length) == 2]

Ответ №3:

Может быть, вы можете попробовать

  • subset с помощью lengths
 > subset(lst,lengths(lst)==2)
$`1`
  a   g
 41 498
  
  • Filter
 > Filter(function(x) length(x)==2,lst)
$`1`
  a   g
 41 498
  

Данные

 > dput(lst)
list(`1` = c(a = 41, g = 498), `2` = c(c = 40, t = 499, g = 1
), `3` = c(a = 28, c = 36, g = 466, t = 9), `4` = c(t = 539))