2017-07-17 4 views
0

data.framesのリストに識別子の列を追加したい(それらのリストを外す前に)。 新しい値の列をdata.framesのリストに設定しました

names = c('a', 'b') 
d1 <- data.frame(y1=c(1,2,3),y2=c(4,5,6)) 
d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4)) 
my.list <- list(d1, d2) 
lapply(seq_along(my.list), function(x) my.list[[x]]$names = names[[x]]) 

しかし、これは

​​

の代わりに返します:私はlapplyを使用してみました

[[1]] 
    y1 y2 names 
1 1 4 a 
2 2 5 a 
3 3 6 a 

[[2]] 
    y1 y2 names 
1 3 6  b 
2 2 5  b 
3 1 4  b 

編集:私はindex(my.list)を使用していた(zooからの)。 (データフレームのリストに名前を追加)あなたが並列に二つの配列を処理するためにMapを使用することができ、ベースR

+0

'index'は、ベースRの関数ではありません。使用しているパッケージの名前を含めてください。 ( 'seq_along(my.list)'で十分です)。 – lmo

+0

fwiwの場合、 'dplyr :: bind_rows'と' data.table :: rbindlist'の両方に、リストからの名前を使ってid列を自動的に追加する機能があります。 – joran

+0

変更されたdata.frameを返す必要があります。 'lapply(seq_along(my.list)、function(x){my.list [[x]] $ names = names [[x]]; my.list [[x]]})'が動作します。また、 'lapply(seq_along(my.list)、function(x)transform(my.list [[x]]、names = names [[x]]))'も参照してください。 – lmo

答えて

0

に滞在しseq_along(my.list)ように編集:

Map(function(df, name) transform(df, names=name), my.list, names) 

#[[1]] 
# y1 y2 names 
#1 1 4  a 
#2 2 5  a 
#3 3 6  a 

#[[2]] 
# y1 y2 names 
#1 3 6  b 
#2 2 5  b 
#3 1 4  b 
関連する問題