【发布时间】:2016-12-11 11:56:39
【问题描述】:
我有这样的数据
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 更快的其他功能或其他东西?
【问题讨论】:
-
我认为
library(data.table);dcast(setDT(resNik), id.x+id.y + ID_col_n +total_id~s_val, value.var = "query_string")应该更快,并且根据here 它正在使用快速整形方法 -
@akrun res1
-
应该是一些属性问题检查
all.equal(res2, res3, check.attributes=FALSE) -
我检查了一个 1e5 数据集,
dcast更快。关于相等性,它是 1) 基于顺序 2) 必须转换为相同的类,即 data.frame 并检查。显示在下面我的解决方案中