首页 > 解决方案 > 基于第二个df(R)的两个属性对数据框进行子集化

问题描述

我有两个数据帧 (elementdf和),如果数据帧之间匹配并且 z 字段>= 90 nodedf,我想对第二个 ( ) 进行子集化。elementdfnidnodedf

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:只要一个是,那么它就符合子集的条件(只要它也是> = 90)。elementdfTRUEnid

期望的输出是:

eid n1 n2 n3 n4
1   1  1  2  3  4

标签: rsubsettopology

解决方案


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

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

推荐阅读