1

我对 R 很陌生,我需要你的帮助来解决一个与非常耗时的过程相关的问题。

我有一个非常大的数据集,我正在尝试对其进行子集化以创建文件 dat。我编写的代码正在运行,但需要很长时间,而且我不知道如何让它更快。

这是我对数据集进行子集化的一段代码

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)
}
4

1 回答 1

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)没有数据的组合创建空文件。

于 2013-04-16T18:10:20.143 回答