R:水平附加表格

时间:2014-09-05 19:35:34

标签: r append write.table

我有两个'数据框'我想要附加到单个csv文件中。我知道可以使用写。要附加它们的表,但write.table会垂直附加它们。有没有办法可以水平追加它们?

编辑:两个数据集是7x2(它是常量),Sx7是S是可变的。 S可能非常大,可能高达1000或更多。

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

1 个答案:

答案 0 :(得分:1)

这绝对是一个快速的黑客攻击。

使用cbind的问题是数据帧的大小不同。解决这个问题的一个快速方法是使它们具有相同的大小,用空的东西填充空白区域,在我的情况下是在NA下面。然后,您可以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]])
}