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]])
}
Другие вопросы по тегам