我有两个数据帧。我想把它们并置,只选择第二个数据帧中的那些行。
样本数据:
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
您可以使用此选项:
选项1d1[!d1$id%in%d2$id,]
选项2d1[is.na(match(d1$id,d2$id)),]
>
选项3library(dplyr) anti_join(d1, d2, by="id")