Как уже упоминали другие, у вас, скорее всего, есть нерегулярные NA
с среди ваших числовых значений.Также возможно, что вы импортировали CSV, используя неправильный десятичный формат.Посмотрите на строки 3-5 в столбце local_aus
.Значения -
, 563,75
и none
приведут к тому, что R приведет столбец к классу "символ":
# A tibble: 5 x 2
year local_aus
<int> <chr>
1 1970 178145
2 1970 94390
3 1970 -
4 1970 563,75
5 1970 none
Если вы запустите as.numeric(df$local_aus)
, вы получите то же предупреждениеВы описываете выше.Вы можете использовать регулярные выражения, чтобы найти проблемные значения (предполагая, что значения должны быть целыми числами):
> df$local_aus[!grepl("^\\d+$", df$local_aus)]
[1] "-" "563,75" "none"
Лучше всего решать эти проблемы при вызове read.*
или readr::read_*
.Вот два примера, которые будут правильно импортировать приведенный выше пример данных:
# using base R
df <- read.table("example.txt",
header = T,
stringsAsFactors = F,
dec = ",",
na.strings = c("-", "none")
)
# using readr library
df <- readr::read_table("example.txt",
locale = locale(decimal_mark = ","),
na = c("-", "none")
)
#### OUTPUT ####
df
# A tibble: 5 x 2
year local_aus
<dbl> <dbl>
1 1970 178145
2 1970 94390
3 1970 NA
4 1970 564.
5 1970 NA