2016-01-20 68 views
1

我有一个数据框的列表,我期待为列表中的每个数据框分配一个变量列,该列简单地是给定数据框名称的字符向量。R +数据框名称作为字符串变量

data <- list(
    d1 = data.frame(animal = sample(c("cat","dog","bird"), 5, replace = T)), 
    d2 = data.frame(animal = sample(c("cat","dog","bird"), 5, replace = T)), 
    d3 = data.frame(animal = sample(c("cat","dog","bird"), 5, replace = T)) 
) 

这产生了:

> data 
$d1 
    animal 
1 cat 
2 bird 
3 cat 
4 cat 
5 cat 

$d2 
    animal 
1 dog 
2 cat 
3 cat 
4 cat 
5 bird 

$d3 
    animal 
1 cat 
2 dog 
3 cat 
4 cat 
5 cat 

我想要做的就是创建类似如下:

> newdata 
$d1 
    animal newvar 
1 cat  d1 
2 cat  d1 
3 cat  d1 
4 dog  d1 
5 cat  d1 

$d2 
    animal newvar 
1 bird  d2 
2 cat  d2 
3 bird  d2 
4 cat  d2 
5 cat  d2 

$d3 
    animal newvar 
1 bird  d3 
2 bird  d3 
3 cat  d3 
4 cat  d3 
5 bird  d3 

但我不能完全弄清楚如何实际引用数据帧名 - 在数据帧列表中 - 并将其适当地转换为字符向量。

像下面的东西不起作用:

namefunc <- function(x) { 
    x <- x %>% transform(newvar = as.character(x)) 
} 

newdata <- namefunc(data) 

回答

4

我们可以使用Mapcbind '数据' 的相应list元素用的names '数据'

Map(cbind, data, newvar= names(data)) 
1
lapply(names(data), function(d) transform(data[[d]], newvar=d)) 

或最终:

L <- lapply(names(data), function(d) transform(data[[d]], newvar=d)) 
names(L) <- names(data)