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

Speeding up R code to match rows between two data frames

提问人:Kyle Bush 提问时间:6/23/2023 最后编辑:MarkKyle Bush 更新时间:8/23/2023 访问量:30

问:

我需要帮助更快地运行此代码。我正在尝试拉取与“数据”中的条目相对应的“东西”行。我有 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 数据帧 匹配 内部连接

评论

2赞 Onyambu 6/23/2023
做一些叫做“内部连接”的事情,即dplyr::inner_join(data, stuff, by = ....)

答:

1赞 Mark 6/23/2023 #1

正如 Onyambu 所说,使用 将比嵌套 for 循环更快,并且代码也更简单。dplyr::innerjoin

下面是一个示例:

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

如果您仍然遇到速度变慢的情况,我会考虑使用其他库。下面比较了一些不同的库,以及它们在联接时的性能。