Подмножество списка, затем с помощью table () для каждого подсписка - PullRequest
1 голос
/ 11 марта 2019

У меня есть список из 1200 видов с атрибутами, которые хранятся в виде вектора:

x <- list(Species1=c("A", "B", "C"), Species2=c("A","C","D"), Species3=c("B", "C","E"))

Векторы различаются по длине. Для каждого вида в x у меня есть таксономическая информация:

tax <- data.frame(Species=c("Species1", "Species2", "Species3"), Taxa=c("Apes", "Birds", "Apes"))

Я хочу

table(unlist(x))

но после поднабора x с tax$Taxa

Желаемый выход

Apes

Спасибо!

1 Ответ

2 голосов
/ 11 марта 2019

Мы stack по имени list в два столбца data.frame merge с набором данных 'tax' и получаем table подмножества столбцов

table(merge(stack(x), tax, by.x = "ind", by.y = "Species")[3:2])
#     values
#Taxa    A B C D E
#  Apes  1 2 2 0 1
#  Birds 1 0 1 1 0

Или используя tidyverse

library(tidvyerse)
set_names(x, tax$Taxa[match(names(x), tax$Species)]) %>%
   enframe %>% 
   unnest %>% 
   count(name, value) %>% 
   spread(value, n, fill = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...