我想合并两个数据集:
DATA_A
group | x | y
101 | 1 | test
101 | 1 | one
102 | 7 | two
102 | 3 | three
DATA_B
group | z |
101 | 1 |
102 | 3 |
我想在group = group和x = z时将data_a合并到data_b中。但是,有时会出现重复的情况,其中data_a中有两行被合并。相反,我想尽可能合并第一次出现:
DATA_B
group | z | y
101 | 1 | test
102 | 3 | three
答案 0 :(得分:1)
data_b$y = data_a$y[match(paste(data_b$group, data_b$z), paste(data_a$group, data_a$x))]
data_b
# group z y
#1 101 1 test
#2 102 3 three
答案 1 :(得分:0)
您可以使用dplyr
执行此操作。 slice(1)
保留每组group和x的第一行,然后执行内连接。
library(dplyr)
data_a %>% group_by(group,x) %>% slice(1) %>% inner_join(data_b,by=c("group"="group","x"="z"))
group x y
<int> <int> <fctr>
1 101 1 test
2 102 3 three
答案 2 :(得分:-1)
首先提取具有相同组的每组data_a行中的第一行,然后使用指示的连接将其与data_b合并。没有包使用。
data_a_u <- data_a[!duplicated(data_a[1]), ]
merge(data_b, data_a_u, all.y = TRUE, by = 1:2)
,并提供:
group z y
1 101 1 test
2 102 7 two
注意:可重复形式的输入数据是:
Lines_a <- "
group | x | y
101 | 1 | test
101 | 1 | one
102 | 7 | two
102 | 3 | three"
data_a <- read.table(text = Lines_a, header = TRUE, sep = "|", strip.white = TRUE)
Lines_b <- "
group | z |
101 | 1 |
102 | 3 |"
data_b <- read.table(text = Lines_b, header = TRUE, sep = "|", strip.white = TRUE)[1:2]