Соедините два кадра данных перед экспортом в виде файлов .csv - PullRequest
5 голосов
/ 10 февраля 2012

Я работаю над большой анкетой и создаю сводные таблицы частот для разных вопросов (например, df1 и df2).

a<-c(1:5)
b<-c(4,3,2,1,1)
Percent<-c(40,30,20,10,10) 
df1<-data.frame(a,b,Percent)
c<-c(1,1,5,2,1)
Percent<-c(10,10,50,20,10)
df2<-data.frame(a,c,Percent)
rm(a,b,c,Percent)

Обычно я экспортирую кадры данных в виде csv-файлов, используя следующую команду:

write.csv(df1 ,file="df2.csv")

Однако, поскольку в моем вопроснике много вопросов и, следовательно, кадров данных, мне было интересно, есть лиКак в R объединить разные фреймы данных (скажем, с разделительной линией) и экспортировать их в CSV (а затем в конечном итоге открыть их в Excel)?Поэтому, когда я открою Excel, у меня будет только один файл со всеми моими информационными фреймами, один под другим.Этот один CSV-файл был бы намного проще, чем отдельные файлы, которые я должен открывать по очереди, чтобы просмотреть результаты.

Заранее большое спасибо.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Если вашей конечной целью является электронная таблица Excel, я рассмотрю некоторые инструменты, доступные в R, для прямой записи файла xls. Лично я использую пакет XLConnect , но есть также xlsx , а также несколько функций write.xls, плавающих в различных пакетах.

Мне нравится XLConnect , потому что он допускает некоторую удобную векторизацию в ситуациях, подобных этой:

require(XLConnect)

#Put your data frames in a single list
# I added two more copies for illustration
dfs <- list(df1,df2,df1,df2)

#Create the xls file and a sheet
# Note that XLConnect doesn't seem to do tilde expansion!
wb <- loadWorkbook("/Users/jorane/Desktop/so.xls",create = TRUE)
createSheet(wb,"Survey")

#Starting row for each data frame
# Note the +1 to get a gap between each
n <- length(dfs)
rows <- cumsum(c(1,sapply(dfs[1:(n-1)],nrow) + 1))

#Write the file
writeWorksheet(wb,dfs,"Survey",startRow = rows,startCol = 1,header = FALSE)
#If you don't call saveWorkbook, nothing will happen
saveWorkbook(wb)

Я указал header = FALSE, так как в противном случае он будет записывать заголовок столбца для каждого фрейма данных. Но добавление единственной строки вверху в файле xls в конце не является большой дополнительной работой.

1 голос
/ 10 февраля 2012

Как прокомментировал Джеймс, вы можете использовать

merge(df1, df2, by="a")

, но это будет объединять данные по горизонтали.Если вы хотите объединить их по вертикали, вы можете использовать rbind:

rbind(df1, df2, df3,...)

(Примечание: имена столбцов должны совпадать, чтобы rbind работал).

...