我有一个问题。请帮忙。 我有两个数据帧。 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
有人可以帮忙吗?
谢谢
答案 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