Как сгруппировать имена столбцов и добавить к ним суффиксы? - PullRequest
2 голосов
/ 02 февраля 2020

Буду признателен, если кто-нибудь поможет мне с задачей, описанной ниже.

У меня есть R-кадр данных со следующими столбцами:

id
cols_len.max.(1,5]
cols_len.max.(1,55]
cols_width.min.(1,55]
cols_width.min.(2,15]
cols_width.uppen.(1,15]

Я хочу переименовать эти столбцы, чтобы получить следующие имена столбцов:

id
cols_len.max_1
cols_len.max_2
cols_width.min_1
cols_width.min_2
cols_width.upper

Это мой текущий код:

colnames(df) <- gsub("\\(.*\\]*-*.","",colnames(df))
colnames(df) <- gsub("\\.","",colnames(df))
colnames(df) <- gsub("-","",colnames(df))
colnames(df) <- gsub("\\_","",colnames(df))

Но это дает мои повторяющиеся имена столбцов (cols_len.max и cols_width.min):

id
cols_len.max
cols_len.max
cols_width.min
cols_width.min
cols_width.upper

Как я могу добавить затем с _N, где N должен быть назначен, как показано выше? Я ищу автоматический подход, потому что мой реальный фрейм данных содержит сотни столбцов.

1 Ответ

3 голосов
/ 02 февраля 2020

Можно удалить подстроку в конце и обернуть с помощью make.unique

v2 <- make.unique(sub("\\.\\(.*", "", v1))

Или другой вариант - использовать вывод sub в качестве переменной группировки, а затем добавить последовательность в end

tmp <- sub("\\.\\(.*", "", v1)
t1 <- ave(seq_along(tmp), tmp, FUN = function(x) 
    if(length(x) == 1) "" else seq_along(x))

и paste it в конце 'tmp'

i1 <- nzchar(t1)
tmp[i1] <-  paste(tmp[i1], t1[i1], sep="_")
tmp
#[1] "id"               "cols_len.max_1"   "cols_len.max_2"   "cols_width.min_1" "cols_width.min_2" "cols_width.upper"

dat

v1 <- c("id", "cols_len.max.(1,5]", "cols_len.max.(1,55]", "cols_width.min.(1,55]", 
"cols_width.min.(2,15]", "cols_width.upper.(1,15]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...