将数据框的名称与数据框的名称绑定为附加的id列

时间:2018-11-10 16:30:39

标签: r

我在R中有3个数据帧 可以说:

df1 <- data.frame(x = 1:5, y = 1:5)
df2 <- data.frame(x = 1:6, y = 1:6)
df3 <- data.frame(x = 1:4, y = 1:4)

,我想将它们合并在一起以创建一个新的数据框,该数据框的第一行应具有该数据框每一行的数据框名称。 我看起来像这样:

   df x y
1  df1 1 1
2  df1 2 2
3  df1 3 3
4  df1 4 4
5  df1 5 5
6  df2 1 1
7  df2 2 2
8  df2 3 3
9  df2 4 4
10 df2 5 5
11 df2 6 6
12 df3 1 1
13 df3 2 2
14 df3 3 3
15 df3 4 4

有什么想法吗? 预先谢谢你。

3 个答案:

答案 0 :(得分:2)

使用bind_rows包中的dplyr。这将适用于任意数量的数据帧。 ls调用获取命名空间中所有以'df'开头的变量; mget为您提供了数据帧的命名列表。 .id参数使您可以指定列名。

df_out <- bind_rows(mget(ls(pattern='df')), .id='df')

输出如下:

    df x y
1  df1 1 1
2  df1 2 2
3  df1 3 3
4  df1 4 4
5  df1 5 5
6  df2 1 1
7  df2 2 2
8  df2 3 3
9  df2 4 4
10 df2 5 5
11 df2 6 6
12 df3 1 1
13 df3 2 2
14 df3 3 3
15 df3 4 4

答案 1 :(得分:1)

使用基本的R函数并稍微扩展NelsonGon的答案:

d <- rbind(df1=df1, df2=df2, df3=df3)
d <- cbind(df=sub("..$", "", rownames(d)), data.frame(d, row.names=NULL))
d
    df x y
1  df1 1 1
2  df1 2 2
3  df1 3 3
4  df1 4 4
5  df1 5 5
6  df2 1 1
7  df2 2 2
8  df2 3 3
9  df2 4 4
10 df2 5 5
11 df2 6 6
12 df3 1 1
13 df3 2 2
14 df3 3 3
15 df3 4 4

这使用cbind将修改后的行名添加为列。

答案 2 :(得分:0)

这是一种简单且非常基本的方法:

rbind(df1=df1,df2=df2,df3=df3)

结果:

      x y
df1.1 1 1
df1.2 2 2
df1.3 3 3
df1.4 4 4
df1.5 5 5
df2.1 1 1
df2.2 2 2
df2.3 3 3
df2.4 4 4
df2.5 5 5
df2.6 6 6
df3.1 1 1
df3.2 2 2
df3.3 3 3
df3.4 4 4