我有以下设置(如果我的真正问题是玩具示例):
data1 = data.frame(cbind(1:8,1:8+3,1:8+5))
data2 = data.frame(rbind(c(4,7,9),c(7,10,12)))
从而
> data1
X1 X2 X3
1 1 4 6
2 2 5 7
3 3 6 8
4 4 7 9
5 5 8 10
6 6 9 11
7 7 10 12
8 8 11 13
和
> data2
X1 X2 X3
1 4 7 9
2 7 10 12
如果data2
中的data1
行有效,我怎样才能找到索引?上面示例中的结果应为c(4,7)
。
我试过循环,但这太低效了。谢谢你的帮助!
答案 0 :(得分:4)
我们可以将[0, 1, 2, 3, 4, 5, 6]
与[0, 1, 2, 3, 4, 5 ,6]
which
或者加入
%in%
答案 1 :(得分:3)
另一种基本R方法是:
x <- rbind(data1, data2)
which(duplicated(x, fromLast=TRUE))
#[1] 4 7
非基础R方法,它为您提供正确的结果(不是行数,而是行的值)
library(compare)
comparison <- compare(data1,data2,allowAll=TRUE)
comparison$tM
# X1 X2 X3
# 1 1 4 6
# 2 2 5 7
答案 2 :(得分:3)
使用dplyr
data1 = data.frame(cbind(1:8,1:8+3,1:8+5))
data2 = data.frame(rbind(c(4,7,9),c(7,10,12)))
library(dplyr)
data1 %>%
# add a row id
mutate(rowID = row_number()) %>%
# keep only rows of data1 that are in data2
semi_join(data2) %>%
# keep one row ID
select(rowID)
#> Joining, by = c("X1", "X2", "X3")
#> rowID
#> 1 4
#> 2 7