2017-12-28 16 views
0

私はループ内のデータフレームをrbind.fillに見ています。私の望む結果は次のようになります: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])) 
    } 

あなたは追加の行が含まれていないデータフレーム(df1df2df3)を見ることができるように:ここでは一例です。これを修正するには?古いDFSに行を追加して後で書き込むことができます。

重要な注記:異なる列番号の行でデータフレームをバインドする関数またはその他の方法である必要があります。

答えて

2

あなたがplyr `にそれを簡略化することができ、すなわち

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)}) 
+0

、リスト内のすべてのデータフレームを入れて適用することができます:: rbind.fill(X、data.frame(VAR1 = xで[1] + 10)) 'イモ。 – h3rm4n

+0

間違っていると私を訂正してください - このコードは自分のdfsに行を追加するのではなく、新しいdfsだけを表示します。私は永続的に既存のデータフレームに行を追加する必要があります(例えば、私はcsvとしてそれらを書くことができます)。私はこの情報を私の質問に更新します。 – Alexandros

+0

ケインはパトリストを「パトリスト」に割り当てる。 'l1 < - lapply(l1、function(i){.....})' – Sotos

関連する問題