从不同的数据框列创建数据框时,列如何命名?

时间:2016-10-26 07:50:09

标签: r

假设我有一个数据框

df1 = data.frame(df1.a=1:3, df1.b=1:3, df1.c=1:3)

  df1.a df1.b df1.c
1     1     1     1
2     2     2     2
3     3     3     3

使用不同的选择器从第一个创建第二个:

df2 = data.frame(df2.a=df1$df1.a, df2.b=df1[,"df1.b"], df2.c=df1["df1.c"])

为什么第三列的列名会被原始列名覆盖而其他列不会?

  df2.a df2.b df1.c <-- why is this not df2.c??
1     1     1     1
2     2     2     2
3     3     3     3

1 个答案:

答案 0 :(得分:3)

这是因为df1["df1.a"]是一列的data.frame,而df1[,"df1.a"]是一个向量。

尝试

> class(df1[,"df1.a"])
[1] "integer"
> class(df1["df1.a"])
[1] "data.frame"

根据文件:

  

对于        包含a的命名或未命名的矩阵/列表/数据框参数        单列,结果中的列名是列名        论证。

因此,

中的参数名称
data.frame(…, df2.c=df1["df1.c"])

被“忽略”,呼叫被视为

data.frame(…, df1.c=df1$df1.c)

当然,参数名称在技术上不会被忽略。

至于为什么 - 列命名很复杂:

  

如何创建数据框的名称很复杂,而且        本段的其余部分只是基本的故事。

例如,尝试

data.frame(df2.x = df1[c("df1.a", "df1.b")])
  df2.x.df1.a df2.x.df1.b
1           1           1
2           2           2
3           3           3

(感谢Roman指出文档的更好部分。)