Ошибка преобразования символьных переменных в числовые, если file.csv использует ";" вместо "," разделения. р
У меня есть два вопроса, на которые я действительно хотел бы найти ответы. Я пытался найти решение во всех потоках, которые уже охватывают проблему "принуждения АН" или как преобразовать факторы в числовые значения. К сожалению, они не решают мою проблему.
Заранее спасибо!
- Почему R определяет значения csv.file как факторы, а не как числа? Вот пример того, как выглядит первая строка файла csv.file:
8248,76; 7736,37; 7669,27;...; -
Есть только цифры, разделенные ";" и два пропущенных значения, обозначенные "-".
Вот как я загрузил их в R:
gdp <- read.table("gdpcap2.csv", sep = ";")
str(gdp)
'data.frame': 19 obs. of 20 variables:
$ V1 : Factor w/ 19 levels "1058,72","1742,08",..: 17 1 13 15 7 10 8 6 4 2 ...
$ V2 : Factor w/ 19 levels "1012,51","1584,46",..: 17 1 10 14 7 11 8 2 5 3 ...
...
Они загружаются просто отлично, но вместо чисел они определяются как факторы. Поэтому, если бы я мог загрузить их как "числовые", мой второй вопрос "Как преобразовать коэффициенты в числовые" также был бы решен.
- Как я пытался конвертировать символы в цифры:
indx <- sapply(gdp, is.factor)
gdp[indx] <- lapply(gdp[indx], function(x) as.numeric(as.character(x)))
Я получаю следующую ошибку после применения:
There were 20 warnings (use warnings() to see them)
Warning messages:
1: In FUN(X[[i]], ...) : NAs introduced by coercion
2: In FUN(X[[i]], ...) : NAs introduced by coercion
3: In FUN(X[[i]], ...) : NAs introduced by coercion
...
Который превратил все ценности в "НС" из-за принуждения.
Теперь то, что действительно озадачило меня:
Я сделал то же самое для другого csv.file, который был разделен "," не ";" и это работало абсолютно хорошо. Файл, который работал хорошо, также имел пропущенные значения, обозначенные "-"
Вот как выглядела строка этого csv.file:
Ангола, -, -, 1,7, -, 1.7,1.8,...
А вот коды R
CPIall <- read.csv("CPI csv.csv")
str(CPIchar)
'data.frame': 19 obs. of 20 variables:
$ 1998: Factor w/ 58 levels "-","1.4","1.5",..: 16 14 25 44 8 38 1 9 21 17 ...
$ 1999: Factor w/ 58 levels "-","1.5","1.6",..: 16 12 26 45 15 35 1 11 25 18 ...
...
indx <- sapply(CPIchar, is.factor)
CPIchar[indx] <- lapply(CPIchar[indx], function(x) as.numeric(as.character(x)))
Используя этот файл csv.file, я также получил предупреждающее сообщение, но оно только изменило пропущенные значения "-" на "NA", что вполне нормально. Все действительные значения были успешно преобразованы в цифры.
Следует также отметить, что я использовал "stringsAsFactors = FALSE"
который наверняка изменил значения на символы. Но у меня были те же проблемы, когда я пытался преобразовать символы в цифры. На мой взгляд, два файла csv.file отличаются только в том, что касается разделения (, и;). Первоначально первый csv.file, который не работает, также содержал названия стран, но я удалил их, просто чтобы убедиться, что они не являются корнем дьявола...
Буду благодарен за любую помощь!
1 ответ
Unfortunately I cannot comment, but I guess you only need to use dec="," when you load your data in order to get R to recognise the decimal parameter.