Ответ 1
Строки NA
в файле csv, N/A
интерпретируются как character
, а затем весь столбец преобразуется в character
. Если у вас stringsAsFactors = TRUE
в options
или в read.csv
(по умолчанию), столбец далее преобразуется в factor
. Вы можете использовать аргумент na.strings
, чтобы сообщить read.csv
, какие строки следует интерпретировать как NA
.
Небольшой пример:
df <- read.csv(text = "x;y
N/A;2,2
3,3;4,4", dec = ",", sep = ";")
str(df)
df <- read.csv(text = "x;y
N/A;2,2
3,3;4,4", dec = ",", sep = ";", na.strings = "N/A")
str(df)
Обновить следующий комментарий
Хотя это не очевидно из предоставленных выборочных данных, существует также проблема с примерами "$", сцепленными с числами, например. '$ 3,3'. Такие значения будут интерпретироваться как character
, а затем dec = ","
нам не поможет. Нам нужно заменить как '$', так и ',', прежде чем переменная будет преобразована в числовую.
df <- read.csv(text = "x;y;z
N/A;1,1;2,2$
$3,3;5,5;4,4", dec = ",", sep = ";", na.strings = "N/A")
df
str(df)
df[] <- lapply(df, function(x){
x2 <- gsub(pattern = "$", replacement = "", x = x, fixed = TRUE)
x3 <- gsub(pattern = ",", replacement = ".", x = x2, fixed = TRUE)
as.numeric(x3)
}
)
df
str(df)