我有两个数据帧:df1和df2。 df1为给定类别的给定起点和终点坐标提供序列中所有整数的等级。例如:
set.seed(1)
df1 <- data.frame(CAT = c(rep(1, 1000000), rep(2, 1000000), rep(3, 1000000)),
START = c(seq(1, 10000000, 10), seq(1, 10000000, 10), seq(1, 10000000, 10)),
END = c(seq(10, 10000000, 10), seq(10, 10000000, 10), seq(10, 10000000, 10)),
RANK = sample(1:100, 3000000, replace = T))
df2提供了一个整数及其类别的列表。例如:
df2 <- data.frame(CAT = sample(1:3, 100, replace = T),
INT = sample(1:15000000, 100))
我正在尝试为df2中的每个INT标识RANK。我可以使用for循环:
system.time({
out <- rep(NA, nrow(df2))
for (i in 1:nrow(df2)){
x <- subset(df1, df1$CAT == df2$CAT[i] &
df1$START <= df2$INT[i] &
df1$END >= df2$INT[i])
if (nrow(x) != 0){ out[i] <- x$RANK[1] }
print(i)
}
})
但是,对于我需要将其应用到的数据集来说,这太慢了。谁能建议一种性能更高的替代方法?