Это разница по умолчанию для элементов tibbles и data.frames.Когда вы смешиваете строки и числа, как в c (1, "01"), R преобразует все в строку.
c(1, "01")
[1] "1" "01"
Поведение по умолчанию для data.frame
состоит в преобразовании строк в факторы.Если вы посмотрите на страницу справки для data.frame
, то увидите аргумент:
stringsAsFactors: ... Заводское значение по умолчанию - TRUE
.фрейм данных превращает c (1, "01") в фактор с двумя уровнями "1" и "01"
T1 = data.frame(fips = c(1,"01"))
str(T1)
'data.frame': 2 obs. of 1 variable:
$ fips: Factor w/ 2 levels "01","1": 2 1
Теперь коэффициенты сохраняются как целые числа для эффективности.Вот почему вы видите 21 в конце вывода о str (T1).Поэтому, если вы непосредственно преобразуете это в целое число, вы получите 2 и 1.
Вы можете получить желаемое поведение, либо сделав data.frame более осторожным с помощью
T1 = data.frame(fips = c(1,"01"), stringsAsFactors=FALSE)
или Вы можете преобразовать коэффициент в строку перед преобразованием в число.
fips = as.numeric(as.character(fips))
В столбцах нет этой проблемы, поскольку они не преобразуют строки в факторы.