Извлечение аналогичных переменных в три кадра данных в R - PullRequest
0 голосов
/ 26 мая 2019

Итак, в настоящее время у меня есть три кадра данных:

>df1

 Variable      Val
    a          0.9
    g          0.3
    e          0.1

>df2

 Variable       Val
   h            0.2
   a            0.7
   e            0.9

>df3

 Variable       Val
   z            0.5
   a            0.7
   e            0.9

, и я пытаюсь извлечь переменную, которая появляется во всех трех фреймах данных, в данном случае это a и e, поскольку a и e появляются в df1, df2, и df3.

Следовательно, вывод, который я хотел получить:

[1] a  e

Это просто переменная без значения.

Я пробовал что-то вроде:

similar <- subset(df1, Variable%in% df2$Variable)

Но, похоже, он ограничен двумя кадрами, а не тремя?

1 Ответ

0 голосов
/ 26 мая 2019

Можно было бы разместить наборы данных в list, извлечь столбец 'variable' и получить элементы, общие с intersect

Reduce(intersect, lapply(mget(paste0("df", 1:3)), `[[`, "Variable"))
#[1] "a" "e"

или аналогичный вариант с tidyverse

library(tidverse)
mget(paste0("df", 1:3)) %>%
      map(~ .x %>%
               pull(Variable)) %>%
      reduce(intersect)
#[1] "a" "e"

Или мы связываем наборы данных в один, сгруппированный по 'Variable', filter количество уникальных групп, равное 3, и извлекаем его 'Variable'

bind_rows(df1, df2, df3, .id = 'grp') %>%
     group_by(Variable) %>%
     filter(n_distinct(grp) == 3) %>%
     distinct(Variable) %>% 
     pull(Variable)

[1] "a" "e"

данные

df1 <- structure(list(Variable = c("a", "g", "e"), Val = c(0.9, 0.3, 
0.1)), class = "data.frame", row.names = c(NA, -3L))

df2 <- structure(list(Variable = c("h", "a", "e"), Val = c(0.2, 0.7, 
0.9)), class = "data.frame", row.names = c(NA, -3L))

df3 <- structure(list(Variable = c("z", "a", "e"), Val = c(0.5, 0.7, 
0.9)), class = "data.frame", row.names = c(NA, -3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...