我正在使用存储在字符数组中的名称重命名R中的数据框(数据)的列。
如果字符数组(名称)中的两个名称相同,例如(“ JK”,“ JK”,“ test”,“ hi”)
使用
colnames(Data) <- Names
colnames(Data)
输出:
"JK" "JK.1" "test" "hi"
所需的输出:
"JK" "JK" "test" "hi"
我不知道为什么将.1附加到第二个名字上。
关于如何避免这种情况的任何建议?
答案 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+#$")
注意:最好在数据中使用唯一的列名称,而不要使用重复的名称