2017-12-13 13 views
1

約30のデータフレームを結合しようとしています。データフレーム名のベクトルによるデータフレームの結合

地球環境を以下のようにコンマで区切ってベクターとして保存しました。

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

今私は、これらのデータフレームのすべての

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(unapp(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

関連する問題