假设我有一个数据框
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
答案 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指出文档的更好部分。)