Как заменить "." в именах столбцов, сгенерированных read.csv() с одним пробелом при экспорте?

Я использую R для предварительной обработки данных, и вот проблема, с которой я столкнулся: я вводил данные с помощью read.csv(filename,header=TRUE), а затем пространство в именах переменных становилось ".", например, переменная с именем Full Code стала Full.Code в сгенерированном фрейме. После обработки я использую write.xlsx(filename) для экспорта результатов, а имена переменных изменены. Как решить эту проблему?

Кроме того, в выходном файле .xlsx первый столбец становится индексом (например, от 1 до N), чего я не ожидаю.

Ответ 1

Если ваш набор check.names=FALSE в read.csv, когда вы читаете данные, тогда имена не будут изменены, и вам не нужно будет редактировать их перед записью данных. Это, конечно, означает, что вам нужно будет указывать имена столбцов (в некоторых случаях кавычки) или ссылаться на столбцы по местоположению, а не на имя во время редактирования.

Ответ 2

Чтобы получить пробелы в именах, сделайте это (прямо перед экспортом - R позволяет вам иметь пробелы в именах переменных, но это боль):

# A simple regular expression to replace dots with spaces
# This might have unintended consequences, so be sure to check the results
names(yourdata) <- gsub(x = names(yourdata),
                        pattern = "\\.",
                        replacement = " ")

Чтобы удалить индекс первого столбца, просто добавьте row.names = FALSE к вашему write.xlsx(). Это общий аргумент для функций, которые выписывают данные в табличном формате (write.csv() тоже).

Ответ 3

Здесь функция (извините, я знаю, что она может быть реорганизована), которая делает хорошие имена столбцов, даже если есть несколько последовательных точек и конечных точек:

makeColNamesUserFriendly <- function(ds) {
  # FIXME: Repetitive.

  # Convert any number of consecutive dots to a single space.
  names(ds) <- gsub(x = names(ds),
                    pattern = "(\\.)+",
                    replacement = " ")

  # Drop the trailing spaces.
  names(ds) <- gsub(x = names(ds),
                    pattern = "( )+$",
                    replacement = "")
  ds
}

Пример использования:

ds <- makeColNamesUserFriendly(ds)