R按row.names合并数据框时为何生成首字母大写的Row.names列
R中merge按行名合并后列名首字母大写的原因
这是R内置merge.data.frame()方法的固定设计,具体逻辑如下:
- 当你通过
by = "id"这类参数指定数据框已有的普通列作为合并键时,merge会直接保留原列名作为合并结果的键名,所以第一个示例的结果里列名还是id。 - 当你指定
by = "row.names"(或者等效的by = 0)按行名合并时,行名本身不属于数据框的常规列,函数为了避免和数据框中可能存在的、名为row.names的普通列重名冲突,会固定将生成的合并键命名为首字母大写的Row.names,专门标识这是从行名转换来的合并列。
如果你需要自定义这个列的名称,可以在合并完成后手动修改列名,示例如下:
# 合并后修改列名 colnames(d3)[1] <- "id"
也可以先把行名转为普通列再合并,直接自定义列名:
library(tibble) d1 <- rownames_to_column(d1, var = "id") d2 <- rownames_to_column(d2, var = "id") d3 <- merge(d1, d2, by = "id")
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

