我希望加快 R 中的一小段代码(见下文),该代码搜索表 1 中与表 2 元素匹配的元素的行 #。请注意,哪个条件有一个 &,因为我需要两个元素 x 和 y 相同才能选择行。
我的数据集很大,这个 for 循环很慢。有没有办法加快速度?
mycoord<-c()
for(k in 1:length(table2)){
mycoord<-c(mycoord,
which(table1$x==table2$x[k] & table1$y==table2$y[k]))
}
谢谢
只需按 x 和 y 合并两个表,并根据需要与合并的输出进行交互。
merged_table <- merge(table1, table2, by=c("x", "y"))
然后,所有合并的列都可用作向量:
merged_table$column1
merged_table$column2
merged_table$column3
...
在 R 中,在大数据大小的情况下,行上的for
循环非常慢。
R 提供了矢量化方法和出色的data.table
包。
您的搜索是包含两个联接列的"联接"。
由于您没有提供输入数据和预期的输出,因此我使用 mtcars
数据集创建了一个简单的示例来展示如何连接:
library(data.table)
table2 = as.data.table(mtcars)
table1 = data.table(cyl = c(4, 6), gear = c(4, 3))
table2[table1, .SD, on = .(cyl, gear)]
在这种情况下,.SD
表示"所有列",on
指定要比较的列("联接列")。
table1
包含"查找"数据(= table2
的过滤条件):
> table1
cyl gear
1: 4 4
2: 6 3