/ / rbind.fillを使ってループに新しい行を追加する - r

rbind.fill -rを使ってループ内に新しい行を追加する

私は方法を探しています rbind.fill ループ内のデータフレーム。私が望む結果はこんな感じです:

library(plyr)
set.seed(101)
df1=data.frame("var1"=runif(18,min=0,max=1),
"index2"=c(rep(c("A","B","C"),6)),
"index1"=c(rep(1,9),rep(2,9)))
x=df1[,1]+10
new_variable=data.frame(var1=x)
rbind.fill(df1,new_variable)

私は自動的に複数のデータフレームに新しい行として文字列を追加するループを作る必要があります。これが一例です。

library(plyr)
#to be sure everyone has same output
set.seed(101)
#example dfs
df1=data.frame("var1"=runif(18,min=0,max=1),
"index2"=c(rep(c("A","B","C"),6)),
"index1"=c(rep(1,9),rep(2,9)))


df2=data.frame("var1"=runif(18,min=0,max=1),
"index2"=c(rep(c("A","B","C"),6)),
"index1"=c(rep(1,9),rep(2,9)))

df3=data.frame("var1"=runif(18,min=0,max=1),
"index2"=c(rep(c("A","B","C"),6)),
"index1"=c(rep(1,9),rep(2,9)))

#df names
df.names=c("df1","df2","df3")

#loop
for (i in 1:length(df.names)){
x=get(df.names[i])[,1]+10
new_variable=data.frame(var1=x)
#my idea of what binding code should look like
rbind.fill(get(df.names[i]),new_variable)
#to print results
print(get(df.names[i]))
}

ご覧のとおりデータフレーム(df1, df2 そして df3)は追加の行を含みません。これを修正するには?後で書き込めるように、古いDFSに行を永続的に追加することを忘れないでください。

重要な注意:それはする必要があります rbind.fill 異なる列番号を持つ行によってデータフレームをバインドする関数または他の方法。

回答:

回答№1は2

すべてのデータフレームをリストにまとめて適用することができます。

library(plyr)

l1 <- mget(ls(pattern = "df[0-9]+"))
l1 <- lapply(l1, function(i){m1 <- i[1] + 10;
new_vars <- data.frame(var1 = m1);
rbind.fill(i, new_vars)})