如何通过R中的a值(不连接)匹配两个dfs



我有两个数据帧。我想把它们并置,只选择第二个数据帧中的那些行。

样本数据:

d1 <- data.frame(id = c(1,222,3,44,56,7,8,9,10,12,13,14),
vals = c(1,2,3,4,5,6,7,8,9,10,11,12))
d2 <- data.frame(id = c(222, 56, 7, 8, 12, 13, 14),
sum = c(12, 13, 14, 15, 16, 16, 16))

理想输出:

d3 <- data.frame(id = c(222, 56, 7, 8, 12, 13, 14),
vals = c(2, 5, 6, 7, 10, 11, 12))
d3
id vals
1 222    2
2  56    5
3   7    6
4   8    7
5  12   10
6  13   11
7  14   12

我尝试使用%in%运算符,但它不能正常工作——有时它会使用d2中没有出现的id。

附言:一些上下文。这是一个样本数据和示例;最初,我有一个汇总表(summarise()(,其中包含来自原始数据帧的绝对值的总和。从汇总表中,我删除了所有等于0的和。我需要所有非零值行都保留在我的原始数据帧中,所以,我正在比较我的两个表。

试试这个:

#Code
d3 <- d1[d1$id %in% d2$id,]

输出:

id vals
2  222    2
5   56    5
6    7    6
7    8    7
10  12   10
11  13   11
12  14   12

您可以查找semi_join。它的名称中有join,但不会合并两个数据帧。

library(tidyverse)

semi_join(d1, d2, by = "id")
id vals
1 222    2
2  56    5
3   7    6
4   8    7
5  12   10
6  13   11
7  14   12

您可以使用此选项:

选项1
d1[!d1$id%in%d2$id,]

选项2
d1[is.na(match(d1$id,d2$id)),]
>
选项3
library(dplyr) anti_join(d1, d2, by="id")

最新更新