我有两个“数据框”,我想将它们附加到一个 csv 文件中。我知道可以使用write。table 附加它们,但 write.table 垂直附加它们。有没有办法可以水平附加它们?
编辑:这两个数据集是 7x2(恒定)和 Sx7,其中 S 是可变的。S 可能非常大,可能高达 1000 或更多。
Edit2:我希望它们首先像 Sx7 一样排列,然后是一列空间,然后是 7x2。我不希望它们被转置,因为 S 可能非常大,我希望能够在 LibreOffice/Excel 中阅读它们。
我有两个“数据框”,我想将它们附加到一个 csv 文件中。我知道可以使用write。table 附加它们,但 write.table 垂直附加它们。有没有办法可以水平附加它们?
编辑:这两个数据集是 7x2(恒定)和 Sx7,其中 S 是可变的。S 可能非常大,可能高达 1000 或更多。
Edit2:我希望它们首先像 Sx7 一样排列,然后是一列空间,然后是 7x2。我不希望它们被转置,因为 S 可能非常大,我希望能够在 LibreOffice/Excel 中阅读它们。
这绝对是一个快速破解。
您使用 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]])
}