R: добавить таблицу горизонтально
У меня есть два "фрейма данных", которые я хотел бы добавить в один CSV-файл. Я знаю, что можно использовать писать. таблица, чтобы добавить их, но write.table добавляет их по вертикали. Есть ли способ, которым я могу добавить их по горизонтали?
Изменить: два набора данных 7x2 (который является постоянным), и Sx7, где S является переменной. S может быть очень большим, потенциально до 1000 или более.
Edit2: я хочу, чтобы они были расположены как с Sx7 сначала, затем столбец пробела, затем 7x2. Я не хочу, чтобы они транспонировались, так как S может быть очень большим, и я хотел бы иметь возможность читать их в LibreOffice/Excel.
1 ответ
Это определенно быстрый взлом.
Ваша проблема с использованием cbind состоит в том, что кадры данных не имеют одинаковый размер. Быстрый способ исправить это состоит в том, чтобы сделать их одинаковыми по размеру, заполнив пустые места чем-то, в моем случае ниже NA. Затем вы можете связать все кадры данных и вывести их как один большой кадр данных в файл. Это создаст впечатление их горизонтального добавления, конечно же, со всеми избыточными наполнителями.
#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]])
}