重命名具有相同名称的数据框的列

时间:2018-09-03 04:24:02

标签: r

我正在使用存储在字符数组中的名称重命名R中的数据框(数据)的列。

如果字符数组(名称)中的两个名称相同,例如(“ JK”,“ JK”,“ test”,“ hi”)

使用

colnames(Data) <- Names
colnames(Data)

输出:

"JK" "JK.1" "test" "hi"

所需的输出:

"JK" "JK" "test" "hi"

我不知道为什么将.1附加到第二个名字上。

关于如何避免这种情况的任何建议?

2 个答案:

答案 0 :(得分:2)

  

我不知道为什么将.1附加到第二个名字上。

这是因为数据框的别名必须唯一。如果两列名称相同,您将如何选择一列? 为了避免将.1附加到名称中,请确保您的names数组具有所有唯一元素。您可以编写名称数组中是否有重复项的功能检查,并用逻辑替换。

答案 1 :(得分:1)

更改列名的原因是基于make.unique中的data.frame调用,该调用会更改重复的列名

make.unique(c("JK", "JK", "JK", "test"))
#[1] "JK"   "JK.1" "JK.2" "test"

我们可以使用sub来匹配..是一个隐含任何字符的元字符-因此请转义\\以获取字面意思),后跟一个或字符串末尾(\\d+)后面的更多数字($)并将其替换为空白(""

names(Data) <- sub("\\.\\d+$", "", names(Data))
names(Data)
#[1] "JK"   "JK"   "test" "hi"  

或者另一个选择是str_remove

library(stringr)
names(Data) <- str_remove(names(Data), "\\.\\d+#$")

注意:最好在数据中使用唯一的列名称,而不要使用重复的名称