2017-07-17 84 views
0

我想要將一個標識符列添加到data.frames列表(在未列出它們之前)。我嘗試使用lapply將新的值列設置爲數據列表。框架

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]]) 

但這返回

​​

相反的:

[[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)。編輯,以seq_along(my.list)留在基礎R

+0

'index'不是基礎R的功能。請包括您使用的任何軟件包的名稱。 ('seq_along(my.list)'就足夠了)。 – lmo

+0

fwiw,'dplyr :: bind_rows'和'data.table :: rbindlist'都能夠使用列表中的名字自動添加一個id列。 – joran

+0

您需要返回已更改的data.frame。 'lapply(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

可以使用Map並行地處理兩個序列(名稱添加到數據幀的列表):

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 
相關問題