2016-12-21 3 views
-3

У меня есть кадры данных с переменным числом строк и только один столбец, который я хотел бы объединить в один df и Экспорт в Excel.R: Приложить несколько кадров данных, состоящих из одного столбца в уникальном фрейме данных, и экспортировать этот фрейм как таблицу excel.

Нет никакой общей информации между dfs, которая позволяет мне выполнять классическое слияние.

Знаете ли вы об эффективном коде, который делает эту операцию простой и быстрой, поскольку у меня так много данных? (см. пример)

DF_list = ls() 

DF_list 

[1] "DF_list"           "HLTclassic_left_120degree"       
[3] "HLTclassic_left_180degree"       "HLTclassic_left_240degree"       
[5] "HLTclassic_left_300degree"       "HLTclassic_left_60degree"       
[7] "HLTclassic_left_Odegree"       "HLTclassic_left_r120degree"       
[9] "HLTclassic_left_r180degree"       "HLTclassic_left_r240degree"       
[11] "HLTclassic_left_r300degree"       "HLTclassic_left_r60degree"       
[13] "HLTclassic_left_rOdegree"       "HLTclassic_right_120degree"       
[15] "HLTclassic_right_180degree"       "HLTclassic_right_240degree"       
[17] "HLTclassic_right_300degree"       "HLTclassic_right_60degree"       
[19] "HLTclassic_right_Odegree"       "HLTclassic_right_r120degree"      
[21] "HLTclassic_right_r180degree"      "HLTclassic_right_r240degree"      
[23] "HLTclassic_right_r300degree"      "HLTclassic_right_r60degree"       
[25] "HLTclassic_right_rOdegree"       "HLTcompatible_lefthemispace_lefthand_0degree"  
[27] "HLTcompatible_lefthemispace_lefthand_120degree"  "HLTcompatible_lefthemispace_lefthand_180degree"  
[29] "HLTcompatible_lefthemispace_lefthand_240degree"  "HLTcompatible_lefthemispace_lefthand_300degree"  
[31] "HLTcompatible_lefthemispace_lefthand_60degree"  "HLTcompatible_lefthemispace_righthand_0degree"  
[33] "HLTcompatible_lefthemispace_righthand_120degree" "HLTcompatible_lefthemispace_righthand_180degree" 
[35] "HLTcompatible_lefthemispace_righthand_240degree" "HLTcompatible_lefthemispace_righthand_300degree" 
[37] "HLTcompatible_lefthemispace_righthand_60degree"  "HLTcompatible_righthemispace_lefthand_0degree"  
[39] "HLTcompatible_righthemispace_lefthand_120degree" "HLTcompatible_righthemispace_lefthand_180degree" 
[41] "HLTcompatible_righthemispace_lefthand_240degree" "HLTcompatible_righthemispace_lefthand_300degree" 
[43] "HLTcompatible_righthemispace_lefthand_60degree"  "HLTcompatible_righthemispace_righthand_0degree"  
[45] "HLTcompatible_righthemispace_righthand_120degree" "HLTcompatible_righthemispace_righthand_180degree" 
[47] "HLTcompatible_righthemispace_righthand_240degree" "HLTcompatible_righthemispace_righthand_300degree" 
[49] "HLTcompatible_righthemispace_righthand_60degree" "HLTincompatible_lefthemispace_lefthand_0degree"  
[51] "HLTincompatible_lefthemispace_lefthand_120degree" "HLTincompatible_lefthemispace_lefthand_180degree" 
[53] "HLTincompatible_lefthemispace_lefthand_240degree" "HLTincompatible_lefthemispace_lefthand_300degree" 
[55] "HLTincompatible_lefthemispace_lefthand_60degree" "HLTincompatible_lefthemispace_righthand_0degree" 
[57] "HLTincompatible_lefthemispace_righthand_120degree" "HLTincompatible_lefthemispace_righthand_180degree" 
[59] "HLTincompatible_lefthemispace_righthand_240degree" "HLTincompatible_lefthemispace_righthand_300degree" 
[61] "HLTincompatible_lefthemispace_righthand_60degree" "HLTincompatible_righthemispace_lefthand_0degree" 
[63] "HLTincompatible_righthemispace_lefthand_120degree" "HLTincompatible_righthemispace_lefthand_180degree" 
[65] "HLTincompatible_righthemispace_lefthand_240degree" "HLTincompatible_righthemispace_lefthand_300degree" 
[67] "HLTincompatible_righthemispace_lefthand_60degree" "HLTincompatible_righthemispace_righthand_0degree" 
[69] "HLTincompatible_righthemispace_righthand_120degree" "HLTincompatible_righthemispace_righthand_180degree" 
[71] "HLTincompatible_righthemispace_righthand_240degree" "HLTincompatible_righthemispace_righthand_300degree" 
[73] "HLTincompatible_righthemispace_righthand_60degree" "Poffenbersession1_lefthemispace_lefthand"   
[75] "Poffenbersession1_lefthemispace_righthand"   "Poffenbersession1_righthemispace_righthand"   
[77] "Poffenbersession1_rightthemispace_lefthand"   "Poffenbersession2_lefthemispace_lefthand"   
[79] "Poffenbersession2_lefthemispace_righthand"   "Poffenbersession2_righthemispace_righthand"   
[81] "Poffenbersession2_rightthemispace_lefthand"   "SNARC_compatible_lefthand_RTs"      
[83] "SNARC_compatible_righthand_RTs"      "SNARC_incompatible_lefthand_RTs"     
[85] "SNARC_incompatible_righthand_RTs"     "colordice_predictability_lefthand_blu"    
[87] "colordice_predictability_lefthand_red"    "colordice_predictability_lefthand_white"   
[89] "colordice_predictability_righthand_blu"    "colordice_predictability_righthand_red"    
[91] "colordice_predictability_righthand_white"   

Спасибо!

+5

Пытаться сделать минимальный [воспроизводимый пример] (HTTP://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), чтобы сделать вашу проблему более ясной. Покажите пример ввода и дайте понять, какой желаемый результат будет для этого ввода. – MrFlick

ответ

0

Комбинирование Колонны

new_df <- cbind.data.frame(df1[,1],df2[,3]) 

cbind Используйте для объединения столбцов. В приведенном выше примере совпадение колонки stdf1 и столбца rddf2 в новый фрейм данных.

Комбинирования Колонны отличающихс Длина:

Update: на основе ваших комментариев, вы, кажется, хочет совместить ДФ с различным числом строк, поэтому вы можете использовать rbind.fill из plyr для заполнения недостающих строк с НС (Source):

library(plyr) 
combined <- rbind.fill(df1[,1], df2[,3]) 

Однако, возможно, придется использовать пользовательскую функцию cbind (Source):

cbind.fill <- function(...){ 
    nm <- list(...) 
    nm <- lapply(nm, as.matrix) 
    n <- max(sapply(nm, nrow)) 
    do.call(cbind, lapply(nm, function (x) 
     rbind(x, matrix(, n-nrow(x), ncol(x))))) 
} 

Экспорт в Excel

library(xlsx) 
write.xlsx(new_df, "c:/myspreadsheet.xlsx") 

Пример

На момент написания этого вы не произвели dput поэтому я приведу пример, который должен работать:

Вот dput из данных, которые я использую (скопируйте это и запустите его в R, чтобы иметь те же данные для запуска примера с):

df <- structure(list(id = c(10, 14, 17, 18), Gender = structure(c(1L, 1L, 2L, 1L), .Label = c("F", "M"), class = "factor"), Col_Cold_1 = structure(c(4L, 2L, 1L, 3L), .Label = c("", "Bump", "muscle", "pain"), class = "factor"),  Col_Cold_2 = structure(c(4L, 2L, 3L, 1L), .Label = c("",  "NA", "pain", "sleep"), class = "factor"), Col_Cold_3 = structure(c(1L,  3L, 2L, 4L), .Label = c("NA", "hemaloma", "muscle", "pain" ), class = "factor"), Col_Hot_1 = structure(c(4L, 3L, 2L,  1L), .Label = c("", "Callus", "NA", "infection"), class = "factor"),  Col_Hot_2 = structure(c(2L, 3L, 1L, 3L), .Label = c("infection",  "medication", "twitching"), class = "factor"), Col_Hot_3 = structure(c(4L,  2L, 1L, 3L), .Label = c("", "flutter", "medication", "walking" ), class = "factor")), .Names = c("id", "Gender", "Col_Cold_1", "Col_Cold_2", "Col_Cold_3", "Col_Hot_1", "Col_Hot_2", "Col_Hot_3"), row.names = c(NA, 4L), class = "data.frame") 

Вот как это выглядит:

id Gender Col_Cold_1 Col_Cold_2 Col_Cold_3 Col_Hot_1 Col_Hot_2 Col_Hot_3 
1 10  F  pain  sleep   NA infection medication walking 
2 14  F  Bump   NA  muscle  NA twitching flutter 
3 17  M     pain hemaloma Callus infection   
4 18  F  muscle     pain   twitching medication 

Итак, давайте скажем, я хочу, чтобы объединить id и Gender:

# first I'm going to separate the data 
a<-as.data.frame(df[,1]) 
b<-as.data.frame(df[,2]) 

# > a 
# df[, 1] 
# 1  10 
# 2  14 
# 3  17 
# 4  18 

#> b 
# df[, 2] 
# 1  F 
# 2  F 
# 3  M 
# 4  F 

# combining the data into a new data frame 
d <- cbind.data.frame(a,b) 

# > d 
# df[, 1] df[, 2] 
# 1  10  F 
# 2  14  F 
# 3  17  M 
# 4  18  F 

# exporting to excel 
install.packages("xlsx") 
library(xlsx) 
write.xlsx(d, "c:/myspreadsheet.xlsx") 
+0

Это сообщение об ошибке, которое я получаю при запуске этого кода: new_df <- cbind.data.frame (colordice_predictability_lefthand_blu, colordice_predictability_lefthand_red) Ошибка в data.frame (..., check.names = FALSE): аргументы подразумевают различное количество строк: 17, 18. Дело в том, что у меня так много фреймов данных с таким количеством разных строк. Мне понадобится код, который сделает это автоматически. – Gianluca

+0

Я обновил ответ на адрес столбцов различной длины. Однако это непроверено. Если он дает ошибку, попробуйте Google перед публикацией другого комментария. –

+0

Большое вам спасибо, функция работает очень хорошо. Единственная проблема заключается в том, что я должен ввести имя всех фреймов данных, которые содержатся в моей глобальной среде, и они равны 95! Я попытался: DF_list = ls() объединить <- cbind.fill (DF_list), но он не работает так, как если бы я вручную вводил имя каждого блока данных. – Gianluca

 Смежные вопросы

  • Нет связанных вопросов^_^