从数据框中提取变量的最有效方法是什么?

时间:2019-05-08 14:45:28

标签: r performance for-loop indexing

我有两个数据帧: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)
}

})

但是,对于我需要将其应用到的数据集来说,这太慢了。谁能建议一种性能更高的替代方法?

0 个答案:

没有答案