如何有效地找到R中数据帧的中间位置的索引?

如何有效地找到R中数据帧的中间位置的索引?,r,R,我有以下设置(如果我的真正问题是玩具示例): 因此 及 如果data1中的data2行有效地查找索引,该如何查找索引?上面例子中的结果应该是c(4,7)。 我试过循环,但这太没效率了。谢谢你的帮助 我们可以在% which(do.call(paste, data1) %in% do.call(paste, data2)) #[1] 4 7 还是加入 library(data.table) setDT(data1, keep.rownames = TRUE)[data2, on = names(

我有以下设置(如果我的真正问题是玩具示例):

因此

如果
data1
中的
data2
行有效地查找索引,该如何查找索引?上面例子中的结果应该是
c(4,7)

我试过循环,但这太没效率了。谢谢你的帮助

我们可以在%

which(do.call(paste, data1) %in% do.call(paste, data2))
#[1] 4 7
还是加入

library(data.table)
setDT(data1, keep.rownames = TRUE)[data2, on = names(data2)]$rn
#[1] "4" "7"

另一种基本的R方法是:

x <- rbind(data1, data2)
which(duplicated(x, fromLast=TRUE))

#[1] 4 7

x带
dplyr

data1=data.frame(cbind(1:8,1:8+3,1:8+5))
data2=数据帧(rbind(c(4,7,9),c(7,10,12)))
图书馆(dplyr)
数据1%>%
#添加行id
变异(rowID=row_number())%>%
#仅保留data2中的data1行
半联接(数据2)%>%
#保留一行ID
选择(rowID)
#>连接,通过=c(“X1”、“X2”、“X3”)
#>罗维德
#> 1     4
#> 2     7

只是一个精度。对于
setDT
您需要加载
data.table
包。它不是基本函数。
数据的
复制
方法。frame
s使用的
粘贴
与@akrun的答案类似。此外,如果
data1
包含在
data2
中不存在的重复行,则您的行可能会带来误报。您可以轻松地调整它们以找到相同的行,而不是差异。
which(do.call(paste, data1) %in% do.call(paste, data2))
#[1] 4 7
library(data.table)
setDT(data1, keep.rownames = TRUE)[data2, on = names(data2)]$rn
#[1] "4" "7"
x <- rbind(data1, data2)
which(duplicated(x, fromLast=TRUE))

#[1] 4 7
library(compare)
comparison <- compare(data1,data2,allowAll=TRUE)
comparison$tM
#     X1 X2 X3
#   1  1  4  6
#   2  2  5  7