r - 如何加快 tidyr up 中的函数速度

标签 r tidyr

我有这样的数据

    n <- 1e5
set.seed(24)
df1 <- data.frame(query_string = sample(sprintf("%06d", 100:1000), 
 n, replace=TRUE), id.x = sample(1:n), 
                  s_val = sample(paste0("F", 400:700), n, 
        replace=TRUE), id.y = sample(100:3000, n, replace=TRUE), 
            ID_col_n = sample(100:1e6, n, replace=TRUE), total_id = 1:n)

我使用扩展函数来使用以下函数分配公共(public)字符串

library(tidyr)

res <- spread(resNik,s_val,value=query_string,fill=NA)

这工作得很好,但是当数据很大时,它就像永远不会结束。我不知道我的电脑是挂了还是仍在运行,因为两个小时后仍然没有任何反应

我想知道是否可以帮助我使用另一种函数或其他比 spread 更快的函数?

最佳答案

基于 data.table1e5dcast 的基准为 faster

library(data.table)
system.time({res1 <- spread(df1,s_val,value=query_string,fill=NA)})
# user  system elapsed 
#   1.50    0.25    1.75 


system.time({res2 <- dcast(setDT(df1), id.x+id.y + ID_col_n +total_id~s_val,
                                  value.var = "query_string")})
# user  system elapsed 
#   0.61    0.03    0.61 

res11 <- res1 %>%
           arrange(id.x)
res21 <- res2[order(id.x)]  

all.equal(as.data.frame(res11), as.data.frame(res21), check.attributes=FALSE)  
#[1] TRUE

差异随着行数的增加而增加,即从“n”更改为 1e6

system.time({res1 <- spread(df1,s_val,value=query_string,fill=NA)})
#   user  system elapsed 
# 28.64    3.17   31.91 
system.time({res2 <- dcast(setDT(df1), id.x+id.y + ID_col_n +total_id~s_val,
                                  value.var = "query_string")})
#   user  system elapsed 
#   5.22    1.08    6.21 

数据

n <- 1e5
set.seed(24)
df1 <- data.frame(query_string = sample(sprintf("%06d", 100:1000), 
 n, replace=TRUE), id.x = sample(1:n), 
                  s_val = sample(paste0("F", 400:700), n, 
        replace=TRUE), id.y = sample(100:3000, n, replace=TRUE), 
            ID_col_n = sample(100:1e6, n, replace=TRUE), total_id = 1:n)

关于r - 如何加快 tidyr up 中的函数速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41079280/

相关文章:

r - 将前缀添加到由pivot_longer names_to .value生成的列名

r - Pivot_wider/spread 而不是 value_from 或值只是 1?

r - 按列名中的模式融化数据帧

r - 如何在整个 data.frame 中搜索字符串

r - 收集/融合多个列集,变量列的整数值?

Roxygen、包构建和使用.Rd2=TRUE

python数据帧写入R数据格式

r - R中函数的语法?

自定义 S4 类的 R 绘图方法

r - 在 grid.arrange 的左上角找到标题