2017-12-13 4 views
1

약 30 개의 데이터 프레임을 병합하려고합니다.데이터 프레임 이름의 벡터로 데이터 프레임 병합

지구 환경을 쉼표로 구분 된 벡터로 저장했습니다.

df_names <- (df1, df2, df3, df4) 

지금 나는이 dataframes
total <- merge(df_names, by = 'ID') 

의 모든 병합하려고하지만 오류를 얻고있다; 답변에

Error in as.data.frame(y) : argument "y" is missing, with no default 
+1

체크 아웃 '목록 –

+1

에 넣어하는 mget''mget' +'Reduce'가 수행해야합니다. – A5C1D2H2I1M1N2O1R2T1

답변

3

변환 코멘트, 당신은 아마 merge과 함께 mgetReduce의 조합을 찾고 있습니다.

데모 :

df1 <- data.frame(ID = 1:3, var = c("a", "b", "c")) 
df2 <- data.frame(ID = c(1, 3, 4), var = c("A", "B", "X")) 
df3 <- data.frame(ID = c(2, 3, 4, 5), var = c("X", "Y", "Z", "A")) 
df4 <- data.frame(ID = 1:5, var = letters[1:5]) 
Reduce(function(x, y) merge(x, y, by = "ID", all = TRUE), mget(paste0("df", 1:4))) 
# ID var.x var.y var.x var.y 
# 1 1  a  A <NA>  a 
# 2 2  b <NA>  X  b 
# 3 3  c  B  Y  c 
# 4 4 <NA>  X  Z  d 
# 5 5 <NA> <NA>  A  e 
# Warning message: 
# In merge.data.frame(x, y, by = "ID", all = TRUE) : 
# column names ‘var.x’, ‘var.y’ are duplicated in the result 
+0

저는 이것을 데이터 프레임에서 실행하려고합니다. 데이터 프레임 이름을 재생산합니다. 현재 가지고 있습니다. 'df_names <- names (which (unlist (eapply (.GlobalEnv, is.data.frame))))'df_names의 목록을 제공합니다. 그런 다음'df_names <- paste (as.character (df_names), collapse = ",", sep = "") '에 의해 깔끔하게 정리할 수 있습니다.'df1, df2, df3, df4' 등등 여기에'total <- merge (df_names, by = 'PANID')'를 호출하고 싶습니다만, 에러가납니다. – user113156

+1

@ user113156, 왜 이름을 붙여 넣을까요? 왜 그냥 벡터로 남겨 두지 않는거야? 'df_names <- paste (as.character (.))를하기 전에 Reduce (function (x, y) merge (x, y, by = "ID", 모두 = TRUE), mget ..), ...)'. – A5C1D2H2I1M1N2O1R2T1

+0

네, 고마워요! df가 너무 커서 컴퓨터를 추락 시켰지만 작동했습니다. 감사 – user113156

관련 문제