如何有效地找到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