2016-01-20 66 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)