Подмножество кадра данных на основе двух атрибутов второго df (R) - PullRequest
0 голосов
/ 02 марта 2019

У меня есть два фрейма данных (elementdf и nodedf), и я хочу установить подмножество второго (elementdf), если nid между фреймами данных соответствует И поле z nodedf равно> = 90.

v1 <- c(1, 2, 3, 4, 5, 6, 8, 9)
v2 <- c(90, 90, 90, 40, 20, 20, 80, 80)
nodedf <- data.frame(v1, v2)
names(nodedf)  <- c("nid", "z") 

v3 <- c(1, 2)
v4 <- c(1, 5)
v5 <- c(2, 6)
v6 <- c(3, 7)
v7 <- c(4, 9)

elementdf <- data.frame(v3, v4, v5, v6, v7)
names(elementdf)  <- c("eid", "n1", "n2", "n3", "n4") 

Мне не нужно, чтобы каждый nid в elementdf был TRUE: если он равен одному, то он подходит для подмножества (если его nid также> = 90).

Желаемый результат:

eid n1 n2 n3 n4
1   1  1  2  3  4

1 Ответ

0 голосов
/ 02 марта 2019

Наличие данных в широком формате усложняет задачу.Здесь мы используем tidyr для изменения формы, чтобы сделать возможным соединение.

library(dplyr)
library(tidyr)
elementdf %>% 
  gather(source, nid, -eid) %>% 
  inner_join(nodedf %>% filter(z>=90)) %>% 
  semi_join(elementdf, .)
...