我是R的新手,我需要你的帮助来解决与非常耗时的过程相关的问题。
我有一个非常大的数据集,我试图通过子集来创建文件数据。我写的代码是有效的,但它需要很长时间,我不知道如何使它更快。
以下是我对数据集
进行子集化的代码df<-data.frame(a,b,c,d,e,f,g,h)
mylist <- list()
for(i in 1:(length(df$a))) {
mylist[[i]] <- subset(df, a==df$a[i])
dep <- as.data.frame(mylist[i])
SHYRMODY <- split(dep, data.frame(dep$a,dep$b, dep$c, dep$d), drop=TRUE)
lapply(names(SHYRMODY),function(x, SHYRMODY)
write.table(SHYRMODY[[x]],
paste(x, ".dat", sep = ""),
col.names=FALSE,
row.names=FALSE,
sep="\t",
quote=FALSE),SHYRMODY)
}
答案 0 :(得分:3)
像这样:
mylist <- split(df, list(df$a, df$b, df$c, df$d), drop = TRUE)
filenames <- paste0(names(mylist), ".dat")
mapply(write.table, mylist, file = filenames,
col.names = FALSE, row.names = FALSE, sep = "\t", quote = FALSE)
drop = TRUE
选项是这样的,它不会为没有数据的(a,b,c,d)
组合创建空文件。