-3

我有两个“数据框”,我想将它们附加到一个 csv 文件中。我知道可以使用write。table 附加它们,但 write.table 垂直附加它们。有没有办法可以水平附加它们?

编辑:这两个数据集是 7x2(恒定)和 Sx7,其中 S 是可变的。S 可能非常大,可能高达 1000 或更多。

Edit2:我希望它们首先像 Sx7 一样排列,然后是一列空间,然后是 7x2。我不希望它们被转置,因为 S 可能非常大,我希望能够在 LibreOffice/Excel 中阅读它们。

4

1 回答 1

1

这绝对是一个快速破解。

您使用 cbind 的问题是数据框的大小不同。解决此问题的一种快速方法是使它们都具有相同的大小,用一些东西填充空白区域,在我的例子中是 NAs 以下。然后,您可以 cbind 所有数据帧并将它们作为一个大数据帧输出到文件中。这将使它们看起来是水平添加的,当然还有所有多余的填充物。

#create a list of the dataframes
dfList<-list(df1, df2)
#find the max rows
maxRows<-max(sapply(dfList, nrow))

#define a function that makes all dataframes "cbind-able"

equalRows<-function(df, numRows){
    numColumns<-ncol(df)
    targetRows<-numRows-nrow(df)
    toAppend<-as.data.frame(matrix(rep(NA, numColumns*targetRows), nrow=targetRows, ncol=numColumns))
    colnames(toAppend)<-colnames(df)
    rbind(df, toAppend)
}

#create our new cbind-able dataframes
newdfList<-lapply(dfList, function(df){

            if(nrow(df)==maxRows){
                df
            }else{
                equalRows(df, maxRows)
            }
        })

#put them all in one for output
dfResult<-newdfList[[1]]
for(i in 2:length(newdfList)){
    dfResult<-cbind(dfResult, newdfList[[i]])
}
于 2014-09-05T20:08:27.313 回答