2014-09-02 53 views
0

我使用rbind将多个数据框附加到更大的数据框中。我想将数据框的名称添加为新的列“name”。使用数据框名称作为列名

n = c(2, 3, 5) 
s = c("aa", "bb", "cc") 
d1 = data.frame(n, s)  

n = c(2, 3, 5) 
s = c("ax", "bx", "cx") 
d2 = data.frame(n, s) 

rbind(d1, d2) 

我希望看到一个以“d1”和“d2”作为变量的新列。我在大量数据集上做这件事情,尽管这个例子很简单,但最终的prdoct会为我节省很多时间。 Thx

+0

'do.call(rbind,MGET(C( “D1”, “D2”)))'让你关闭。我很确定这个问题是重复的。 – A5C1D2H2I1M1N2O1R2T1 2014-09-02 17:09:11

+0

'list(d1 = d1,d2 = d2)' – 2014-09-02 17:10:41

+0

感谢您将我指向正确的方向@anando。那里的答案很好。 – 2014-09-02 17:20:37

回答

0

我相信你正在寻找好的'deparse(substitute())这里的诡计。在下面,我修改了您的代码,为每个data.frame添加了一个附加列,其中只包含data.frame本身的名称。

n = c(2, 3, 5) 
s = c("aa", "bb", "cc") 
d1 = data.frame(n, s) 
d1$name <- deparse(substitute(d1)) 

n = c(2, 3, 5) 
s = c("ax", "bx", "cx") 
d2 = data.frame(n, s) 
d2$name <- deparse(substitute(d2)) 

d3 <- rbind(d1, d2) 

当你把它们合并在一起所产生的data.frame看起来像

!> d3 
    n s name 
1 2 aa d1 
2 3 bb d1 
3 5 cc d1 
4 2 ax d2 
5 3 bx d2 
6 5 cx d2 
+0

'rep_len(ls(pattern =“d(1 | 2)”),2 * nrow(d1))' – 2014-09-02 17:42:46

相关问题