Ответ 1
лучшее решение, которое я нашел до сих пор
names(ctm2) %<>% stringr::str_replace_all("\\s","_") %>% tolower
кредит отправляется комментаторам и другим ответам
После импорта файла я всегда пытаюсь удалить пробелы из имен столбцов, чтобы упростить обращение к именам столбцов.
Есть ли лучший способ сделать это, а затем использовать преобразование, а затем удалить дополнительный столбец, созданный этой командой?
Это то, что я использую сейчас:
names(ctm2)
#tranform function does this, but requires some action
ctm2<-transform(ctm2,dymmyvar=1)
#remove dummy column
ctm2$dymmyvar <- NULL
names(ctm2)
лучшее решение, которое я нашел до сих пор
names(ctm2) %<>% stringr::str_replace_all("\\s","_") %>% tolower
кредит отправляется комментаторам и другим ответам
Для этой цели существует более элегантное и общее решение:
tidy.name.vector <- make.names(name.vector, unique=TRUE)
make.names()
делает синтаксически допустимые имена из векторов символов. Синтаксически действительное имя состоит из букв, цифр и символов точки или подчеркивания и начинается с буквы или точки, за которой не следует число.
Кроме того, флаг unique=TRUE
позволяет избежать возможных дубликатов в именах новых столбцов.
В качестве кода для реализации
d<-read_delim(urltxt,delim='\t',)
names(d)<-make.names(names(d),unique = TRUE)
Чтобы заменить только первое место в каждом столбце, вы также можете:
names(ctm2) <- sub(" ", ".", names(ctm2))
или заменить все пробелы (кажется, это было бы немного более полезно):
names(ctm2) <- gsub(" ", "_", names(ctm2))
или, как упоминалось в первом ответе (хотя и не так, чтобы исправить все пробелы):
spaceless <- function(x) {colnames(x) <- gsub(" ", "_", colnames(x));x}
newDF <- spaceless(ctm2)
где x - имя вашего data.frame. Я предпочитаю использовать "_", чтобы избежать проблем с ".". как часть идентификатора.
Дело в том, что gsub не останавливается в первом экземпляре соответствия шаблона.
Для этого есть очень полезный пакет, называемый janitor
который упрощает очистку имен столбцов. Он удаляет все уникальные символы и заменяет пробелы _
.
library(janitor)
#can be done by simply
ctm2 <- clean_names(ctm2)
#or piping through 'dplyr'
ctm2 <- ctm2 %>%
clean_names()
Назначьте имена следующим образом. Это лучше всего работает. Он заменяет все пробелы в имени символом подчеркивания.
names(ctm2)<-gsub("\\s","_",names(ctm2))
dplyr::select_all()
может использоваться для переформатирования имен столбцов. Этот пример заменяет пробелы и периоды символом подчеркивания и преобразует все в нижний регистр:
iris %>%
select_all(~gsub("\\s+|\\.", "_", .)) %>%
select_all(tolower) %>%
head(2)
sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
Просто назначьте names(ctm2)
:
names(ctm2) <- c("itsy", "bitsy", "eeny", "meeny")
или с помощью данных:
names(ctm2) <- paste("myColumn", 1:ncol(ctm2), sep="")
Другая возможность - отредактировать исходный файл...
Существует простой способ удаления пробелов в именах столбцов в data.table. Вам нужно будет преобразовать ваш фрейм данных в таблицу данных.
setnames(x=DT, old=names(DT), new=gsub(" ","",names(DT)))
Country Code
будет преобразован в CountryCode
В качестве альтернативы вы можете получить те же результаты с пакетом stingr.
names(ctm2)<-names(ctm2)%>% stringr::str_replace_all("\\s","_")
Вы также можете использовать комбинацию имен make и функций gsub в R.
names(ctm2)<- gsub("\\.","_", make.names(names(ctm2), unique = T))
Выше код будет делать 2 вещи одновременно: