如何根据列数将数据框拆分为单独的数据框

how to split a dataframe in to separate dataframe based on the number of columns

我有一个数据框,我正在尝试将数据框拆分为单独的数据集,并将数据集的文件名作为数据框的名称

df1 <- 

    `      Name  test1 test2  test3`
            ad1    43    44      42
            ad2    32    32      23
            ad3    21    26      23

所需输出:3 个单独的文件 test1.txt、test2.txt、test3.txt

test1.txt = Name  test1
             ad1   43
             ad2   32
             ad3   21

   test2.txt = Name  test2
                 ad1   44
                 ad2   32
                 ad3   26

   test3.txt = Name  test3
                 ad1   42
                 ad2   23
                 ad3   23

您可以将它拆分成一个 list,像这样:

lapply(2:ncol(df1), function(x) df1[c(1, x)])

或者您可以将它们写到新文件(比如 csv 文件)中,像这样:

lapply(2:ncol(df1), function(x) {
  write.csv(df1[c(1, x)], file = sprintf("%s.txt", names(df1[x])))
})

简单的东西就是一个循环。

df <-data.frame(Name=c("ad1","ad2","ad3"),test1=c(43,32,21),
test2=c(44,32,26),test3=c(42,23,23))

for (i in 2:ncol(df)) {
        curdf<-subset(df,,select=(c(1,i)))
        write.table(curdf, paste(names(df)[i],".txt",sep=""), sep="\t")
}

这个循环应该可以工作

for(i in 1:(length(colnames(b))-1)){
  temp <- as.data.frame(cbind(b$Name,b$test1))
  colnames(temp) <- c("Name",paste("test",i,sep=""))
  write.csv(temp,file=paste("test",i,".txt",sep=""))
}

如果您的文件数和列数发生变化,这种方式仍然有效