Переименование столбцов фрейма данных с тем же именем - PullRequest
0 голосов
/ 03 сентября 2018

Я переименовываю столбцы фрейма данных (Данные) в R, имена хранятся в массиве символов.

Если два имени совпадают в массиве символов (Имена), например («JK», «JK», «test», «hi»)

с помощью

colnames(Data) <- Names
colnames(Data)

Выход:

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

Желаемый вывод:

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

Я не могу понять, почему .1 добавляется ко второму имени.

Любые предложения о том, как этого избежать?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Я не могу понять, почему .1 добавляется ко второму имени.

Это потому, что имена столбцов данных должны быть уникальными. Как вы сможете выбрать столбец, если два столбца имеют одинаковое имя? Чтобы избежать добавления .1 к colname, убедитесь, что ваш массив имен содержит все уникальные элементы. Вы можете написать функцию проверки на наличие дубликатов в массиве имен и заменить ее чем-то логичным.

0 голосов
/ 03 сентября 2018

Причина изменения имен столбцов основана на вызове 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+#$")

ПРИМЕЧАНИЕ. Лучше иметь уникальные имена столбцов в данных, чем дублированные имена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...