基于第二个df(R)的两个属性子集数据帧

问题描述 投票:0回答:1

我有两个数据帧(elementdfnodedf),如果数据帧之间的elementdf匹配且nid的z字段> = 90,我想要第二个(nodedf)的子集。

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
r subset topology
1个回答
1
投票

拥有宽格式的数据会使这更难。在这里,我们使用tidyr进行一些重塑以使连接成为可能。

library(dplyr)
library(tidyr)
elementdf %>% 
  gather(source, nid, -eid) %>% 
  inner_join(nodedf %>% filter(z>=90)) %>% 
  semi_join(elementdf, .)
© www.soinside.com 2019 - 2024. All rights reserved.