我怎样才能加快 tidyr up 中的功能
how can I speed a function in tidyr up
我有这样的数据
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)
我使用传播函数来分配常用字符串,使用以下函数
library(tidyr)
res <- spread(resNik,s_val,value=query_string,fill=NA)
这很完美,但是当数据很大时,它就像永远不会结束。我不知道我的电脑是挂了还是还在 运行 因为两个小时后仍然没有任何反应
我想知道是否有人可以帮助我使用另一个功能或其他比 spread
更快的功能?
根据 data.table
中 1e5
行 dcast
的基准是 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)
我有这样的数据
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)
我使用传播函数来分配常用字符串,使用以下函数
library(tidyr)
res <- spread(resNik,s_val,value=query_string,fill=NA)
这很完美,但是当数据很大时,它就像永远不会结束。我不知道我的电脑是挂了还是还在 运行 因为两个小时后仍然没有任何反应
我想知道是否有人可以帮助我使用另一个功能或其他比 spread
更快的功能?
根据 data.table
中 1e5
行 dcast
的基准是 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)