提问人:Kyle Bush 提问时间:6/23/2023 最后编辑:MarkKyle Bush 更新时间:8/23/2023 访问量:30
加速 R 代码以匹配两个数据帧之间的行
Speeding up R code to match rows between two data frames
问:
我需要帮助更快地运行此代码。我正在尝试拉取与“数据”中的条目相对应的“东西”行。我有 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,]
}
}
}
答:
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
如果您仍然遇到速度变慢的情况,我会考虑使用其他库。下面比较了一些不同的库,以及它们在联接时的性能。
评论
dplyr::inner_join(data, stuff, by = ....)