Как исправить пробелы в именах столбцов data.frame (удалить пробелы, ввести точки)?

После импорта файла я всегда стараюсь удалять пробелы в именах столбцов, чтобы упростить обращение к именам столбцов.

Есть ли лучший способ сделать это иначе, чем использовать transform и затем удалить дополнительный столбец, который создает эта команда?

Это то, что я использую сейчас:

names(ctm2)
#tranform function does this, but requires some action
ctm2<-transform(ctm2,dymmyvar=1)
#remove dummy column
ctm2$dymmyvar <- NULL
names(ctm2)
 Tyler Rinker21 мая 2012 г., 17:48
Используйте функцию inject.dots:inject.dots <- function(df) {names(df) <- sub(" ", ".", names(df));df}
 smci27 июн. 2018 г., 00:47
@TylerRinker: да, это так. И то и другоеread.csv/read.table(..., check.names=T), И по умолчанию TRUE.
 Tyler Rinker21 мая 2012 г., 17:49
С другой стороны, я удивлен, что R импортирует имена столбцов с пробелами и не исправляет их автоматически.
 42-21 мая 2012 г., 18:00
@TylerRinker Функция read.table делает это по умолчанию сmake.names функция.

Ответы на вопрос(9)

Просто назначьтеnames(ctm2):

  names(ctm2) <- c("itsy", "bitsy", "eeny", "meeny")

или управляемым данными способом:

  names(ctm2) <- paste("myColumn", 1:ncol(ctm2), sep="")

Другая возможность - отредактировать ваш исходный файл ...

Чтобы заменить только первый пробел в каждом столбце, вы также можете сделать:

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. Я предпочитаю использовать & quot; _ & quot; чтобы избежать проблем с & quot;. & quot; как часть удостоверения личности.

Дело в том, что gsub не останавливается при первом совпадении с шаблоном.

 11 мар. 2016 г., 17:15
Проблема с этим, по крайней мере с моей стороны, заключается в следующем: если имя столбца имеет более одного пробела, он заменит только первый

Для этого существует более элегантное и общее решение:

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)
 30 мая 2018 г., 22:25
натереть раствор. Вот аккуратная альтернатива:df %>% dplyr::rename_all(funs(make.names(.)))
 12 июн. 2017 г., 00:37
В вашем коде, что такое имя датафрейма?

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

Существует простой способ удалить пробелы в именах столбцов в data.table. Вам нужно будет преобразовать ваш фрейм данных в таблицу данных.

setnames(x=DT, old=names(DT), new=gsub(" ","",names(DT)))

Country Code будет преобразован вCountryCode

 15 авг. 2017 г., 21:43
не указыватьold и это будет иметь тот же результат. (Это описано в документации.)

Кроме того, вы можете достичь тех же результатов с помощью пакета stingr.

names(ctm2)<-names(ctm2)%>% stringr::str_replace_all("\\s","_")

Назначьте имена как это. Это работает лучше всего. Он заменяет все пробелы в имени подчеркиванием.

names(ctm2)<-gsub("\\s","_",names(ctm2))

 18 мая 2018 г., 19:29
Самое прямое, самое краткое решение, безусловно.

Для этого есть очень полезный пакетjanitor это делает очистку имен столбцов очень простой. Удаляет все уникальные символы и заменяет пробелы на_.

library(janitor)

#can be done by simply
ctm2 <- clean_names(ctm2)

#or piping through `dplyr`
ctm2 <- ctm2 %>%
        clean_names()
Решение Вопроса

лучшее решение, которое я нашел, пока

names(ctm2) %<>% stringr::str_replace_all("\\s","_") %>% tolower

кредит достается комментаторам и другим ответам

Ваш ответ на вопрос