【问题标题】:How rewrite R for(){} function from dplyr to data.table?如何将 R for(){} 函数从 dplyr 重写为 data.table?
【发布时间】:2021-12-24 02:16:32
【问题描述】:

我在一个读取文件夹中特定文件列的函数中有这个 for(){}。但是因为我有几个文件,所以速度很慢。

如何以 data.table 格式重写它?

我使用arrange(),因为之后我会按名称绑定这两个df。名称在文件中相同,但在这些文件中的顺序不同。为此,我需要按名称绑定列 class1 和 class2。

for (i in 1:length(temp)) {
    
    df1 <- read_table(temp[[i]],
                      col_types = "c________________f__",
                      col_names = c("name", "class1")) %>% 
      arrange(name)
    
    df2 <- read_table(str_remove(temp[[i]], "_automat"),
                      col_types = "c________________f__",
                      col_names = c("name", "class2")) %>% 
      arrange(name)
}

【问题讨论】:

    标签: r for-loop dplyr data.table


    【解决方案1】:

    如果你只是想把它转换成data.tables,你可以从read_table切换到fread,这应该会更快,并且会生成一个you can sort with[order(*)]的data.table:

    library(data.table)
    
    fread(file=temp[[i]], select = c(name='character', class1='numeric'))[order(name)]
    

    这可能会提高你的速度,但我认为如果你想要更显着的改进,我会考虑用 foreach 包中的并行 foreach 循环替换你的 for 循环。有很多关于如何做到这一点的问题,但您可能想从这里开始:run a for loop in parallel in R

    【讨论】:

    • setorder 可能比 order 快
    猜你喜欢
    • 2020-02-06
    • 2022-11-02
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多