首页 > 解决方案 > 如何根据R中的虚拟值合并具有不相等行的两个数据集

问题描述

我有两个具有不相等行的 R 数据框,需要根据列中的虚拟值进行合并。

x <- c(3,4,5,3,5,1,4,5)
y <- c(0,0,1,0,1,1,0,0)
df1 <- data.frame(x,y)

  x y
1 3 0
2 4 0
3 5 1
4 3 0
5 5 1
6 1 1
7 4 0

z <- c(7,8,9)
y <- c(1,1,1)
df2 <- data.frame(a,b)

  z y
1 7 1
2 8 1
3 9 1

是否可以在不使用循环的情况下将两者合并,以使生成的数据帧如下?

  x y z
1 3 0 0
2 4 0 0
3 5 1 7
4 3 0 0
5 5 1 8
6 1 1 9
7 4 0 0

当 y 中出现第一个值 1 时,将 z 的值设置为 df2 中 z 的第一个值。

标签: rdataframemerge

解决方案


你可以试试

library(dplyr)

df1 <-df1 %>%
  group_by(y) %>%
  mutate(n = 1:n())

df2 <- df2 %>%
  group_by(y) %>%
  mutate(n = 1:n())
df1 %>%
  left_join(df2, by =c("n", "y")) %>%
  mutate(z = replace_na(z, 0)) %>%
  select(-n)
  
      x     y     z
  <dbl> <dbl> <dbl>
1     3     0     0
2     4     0     0
3     5     1     7
4     3     0     0
5     5     1     8
6     1     1     9
7     4     0     0
8     5     0     0

推荐阅读