r - 在 R 中使用嵌套 if 优化 For 循环

标签 r for-loop nested-loops

我正在尝试将多个 csv 文件合并到一个数据帧中,并尝试使用 for 循环操作生成的数据帧。生成的数据帧可能有 1,500,000 到 2,000,000 行之间的任何位置。

我使用下面的代码来实现相同的目的。

setwd("D:/Projects")
library(dplyr)
library(readr)
merge_data = function(path) 
{ 
  files = dir(path, pattern = '\\.csv', full.names = TRUE)
  tables = lapply(files, read_csv)
  do.call(rbind, tables)
}


Data = merge_data("D:/Projects")
Data1 = cbind(Data[,c(8,9,17)],Category = "",stringsAsFactors=FALSE)
head(Data1)

for (i in 1:nrow(Data1))
{ 
  Data1$Category[i] = ""
  Data1$Category[i] = ifelse(Data1$Days[i] <= 30, "<30",
                       ifelse(Data1$Days[i] <= 60, "31-60",
                       ifelse(Data1$Days[i] <= 90, "61-90",">90")))     

}

但是代码运行时间很长。有没有更好更快的方法来完成相同的操作?

最佳答案

我们可以通过使用 freaddata.table 读取,然后使用 cut/findInterval 来使其更加优化。当它在服务器上的多核、节点中运行时,这种情况会变得更加明显,其中 fread 利用所有节点并并行执行

library(data.table)
merge_data <- function(path) { 
   files = dir(path, pattern = '\\.csv', full.names = TRUE)
  rbindlist(lapply(files, fread, select = c(8, 9, 17)))
 }

Data <- merge_data("D:/Projects")
Data[, Category := cut(Data1, breaks = c(-Inf, 30, 60, 90, Inf), 
      labels = c("<=30", "31-60", "61-90", ">90"))]

关于r - 在 R 中使用嵌套 if 优化 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43594029/

相关文章:

c# - 具有嵌套元素的中继器控件 TR TD

r - 在 R 中的大矩阵中添加连续的四/n 个数字

R:用 X 而不是 V 重命名数据框的列名

python - R reticulate 从 Github 安装 python 库

python - Jinja2 中带有相关变量的 For 循环

c# - For 循环,应用程序挂起

r - 函数内 dplyr 的 mutate_each 有效,但matches() 找不到参数

java - 安卓工作室(Java): Continue prime number for loop on button press

PHP 嵌套 FOR 循环故障排除

python - 跳棋算法 : how to reduce nested for loops