根据R中另一个datafram中的列匹配从datafrom中选择特定行

时间:2018-03-09 18:12:05

标签: r dataframe

我有一个问题。请帮忙。 我有两个数据帧。 data1和data2

data1具有以下数据

HHID..... blockid....serial_number...name
100............1............1.........xxx
100............2............2.........yyy
100............1............3.........zzz
200............1........... 1.........sss
200............1............2.........ddd

data2如下

HHID-.......serial....... hospital
100...........3...............Delhi
200...........2...............paris

现在,我想基于HHID和data2中的serial选择data1中的行。例如,在这里,在data2中,我们可以看到一个HHID为100且串行为3的行。因此,我想只选择来自data1的那行,其中HHID为100,串行为3.同样,对于HHID 200和串行2.同样,当我从data1中选择行,我不想从data2中获取任何额外的列。我关心的是数据2中的HHID和序列是否与data1匹配。如果是,那么我需要data1中的完整行。所以输出应该如下

HHID....blockid.....serial....name
100..... .....1........3......zzz
200...........1........2......ddd

有人可以帮忙吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以为每个数据框创建一个唯一的ID,如下所示:

data1

然后,您可以使用子集函数来隔离result <- subset(data1, unique %in% data2$unique) 中的行,如下所示:

env["GN_DEFINES"] = "use_sysroot=true use_allocator=none symbol_level=1"

答案 1 :(得分:0)

我建议:

我在这里重新创建数据:

library(tidyverse) 

data1 <- read.table(text="HHID blockid serial_number name
100 1 1 xxx
100 2 2 yyy
100 1 3 zzz
200 1 1 sss
200 1 2 ddd", sep = " ", stringsAsFactors = F, header = T)

data2 <- read.table(text="HHID serial hospital
100 3 Delhi
200 2 paris", sep = " ", stringsAsFactors = F, header = T)

这是我的建议

results <- data1 %>% 
  rename(serial=serial_number) %>% 
  right_join(data2, by=c("HHID", "serial")) %>%
  select(-hospital) # get rid of the hospital column

results

如果您不熟悉tidyverse,可以逐步执行每一行,直到%>%看到单步。这是输出:

   HHID blockid serial name 
1  100       1      3  zzz    
2  200       1      2  ddd