R- Почему Xs добавляется к именам переменных в моем кадре данных?
Когда я использую функцию read.csv()
в R
для загрузки данных, я часто обнаруживаю, что X добавлен к именам переменных. Я думаю, что я почти всегда вижу это в первой переменной, но я могу ошибаться.
Сначала я думал, что R
может делать это, потому что у меня было место в начале имени переменной - я этого не делаю.
Во-вторых, я где-то читал, что если у вас есть переменная, которая начинается с числа или является очень коротким именем переменной, R
будет добавлять X. Имя переменной - это весь текст и длина имени эта переменная составляет 12 символов, поэтому она не короткая.
Теперь это просто раздражение. Я могу переименовать столбец, но он добавляет шаг, хотя и небольшой.
Есть ли способ предотвратить это от изгоев X от проникновения в мой фрейм данных?
Вот мой оригинальный код:
df <- read.csv("/file/location.filecsv", header=T, sep=",")
Вот эта переменная:
str(orders)
'data.frame': 2620276 obs. of 26 variables:
$ X.OrderDetailID : Factor w/ 2620193 levels "(2620182 row(s) affected)",..: 105845
Ответы
Ответ 1
read.table
и read.csv
имеют аргумент check.names=
, который можно установить на FALSE
.
Например, попробуйте с этим входом, состоящим только из заголовка:
> read.csv(text = "a,1,b")
[1] a X1 b
<0 rows> (or 0-length row.names)
против
> read.csv(text = "a,1,b", check.names = FALSE)
[1] a 1 b
<0 rows> (or 0-length row.names)
Ответ 2
Это удивительное поведение, но я думаю, что нам нужен воспроизводимый пример. Возможно, у вас есть некоторые невидимые/специальные символы, скрывающиеся в вашем файле?
names(read.csv(textConnection(
"abcdefghijkl, a1,2x")))
ведет себя хорошо. Можете ли вы привести пример в этом направлении, который демонстрирует вашу проблему?
Как описано в другом ответе, check.names=FALSE
- это возможное обходное решение. Вы можете поэкспериментировать с make.names
, чтобы определить поведение...
Ответ 3
Как сказал Габор, по умолчанию read.csv
deafults преобразуют имена в вашей строке заголовка как допустимые имена переменных (используйте check.names = FALSE
, чтобы отключить это). Это делается с помощью функции make.names
. Страница справки для этой функции объясняет, что представляет собой допустимое имя переменной.
Синтаксически действительное имя состоит из букв, цифр и точки или подчеркивать символы и начинать с буквы или точки не следовать числом. Имена, такие как ".2way", недействительны, и зарезервированные слова.
Список зарезервированных слов находится на странице справки ?reserved
.
Другое условие состоит в том, что имя переменной должно быть 10000 символов или меньше, но make.names
не сократит его. Поэтому будьте осторожны, чтобы быть действительно многословными с вашими именами переменных.
Вы можете проверить допустимые имена переменных, используя
library(assertive.code)
is_valid_variable_name(x)