r - 如何根据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 的第一个值。
解决方案
你可以试试
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
推荐阅读
- javascript - 如何删除 JS var 中的空格?
- asp.net-core - 如何使用 NSubstitute 和 XUnit 模拟返回 bool 的 UpdateOneAsync 方法?
- django - 为什么我的表值没有显示在 django 模板中?
- python - 如何从句子中只提取单词?
- angular - Ionic 5/angular 不能再访问页面了?
- python - 正则表达式不允许特殊字符在 python 中失败
- discord.py - 您如何制作特定于角色的命令以及特定于权限的命令
- flutter - Flutter 无状态小部件调用的问题
- python - 为什么 Pandas 转置失败且没有错误?
- elasticsearch - 为桶弹性搜索聚合中的每个键设置阈值