加速 R 代码以匹配两个数据帧之间的行

问题描述 投票:0回答:1

我需要帮助更快地运行此代码。我试图拉出与“数据”中的条目相对应的“内容”行。我有 800,000 行内容和 17,000 行数据。已经花了24个多小时了,还没完成。我是编码新手,不知道有任何其他方法可以尝试这个

这是我正在运行的代码

plays <- data.frame(matrix(nrow=16218, ncol=7))

for(i in 1:nrow(data)){
  for(j in 1:nrow(stuff)){
    if(stuff[j,4] == data[i,5] & stuff[j,2] == data[i,2]){
      plays[i,] <- stuff[j,]
    }
  }
}
r dataframe join match inner-join
1个回答
1
投票

正如Onyambu所说,使用

dplyr::innerjoin
会比嵌套for循环更快,而且代码也更简单。

这是一个例子:

library(tibble)

# Create 'stuff' tibble
stuff <- tibble(
  ID = c(1, 2, 3, 4),
  Name = c("Apple", "Banana", "Orange", "Grape"),
  Color = c("Red", "Yellow", "Orange", "Green")
)

# Create 'data' tibble
data <- tibble(
  ID = c(2, 4, 5),
  Value = c(10, 20, 30),
  Weight = c(0.5, 0.8, 1.2)
)

inner_join(stuff, data, by = "ID")

# A tibble: 2 × 5
     ID Name   Color  Value Weight
  <dbl> <chr>  <chr>  <dbl>  <dbl>
1     2 Banana Yellow    10    0.5
2     4 Grape  Green     20    0.8

如果您仍然遇到速度缓慢的情况,我会考虑使用不同的库。 这里是一些不同库的比较,以及它们在连接上的性能。

© www.soinside.com 2019 - 2024. All rights reserved.