Преобразуйте запятые, разделенные запятыми, из цифр в цифры - PullRequest
0 голосов
/ 09 мая 2019

Для моего экзамена я должен построить несколько точечных диаграмм в r. Я создал фрейм данных с 4 переменными. с этим фреймом данных я хочу добавить линии регрессии к моим точечным диаграммам.

имя моего фрейма данных - "alle". имена переменных: demo, tot, besch, usd

с помощью этого кода я попытался выровнять линию регрессии, но получил следующий результат:

reg1<- lm(tot~demo, data=alle)
Warning messages:
1: In model.response(mf, "numeric") :
  using type = "numeric" with a factor response will be ignored

2: In Ops.factor(y, z$residuals) : ‘-’ not meaningful for factors

вот структура "алле"

str(alle)
'data.frame':   11 obs. of  4 variables:
 $ demo : chr  "498.300.775" "500.297.033" "502.090.235" "503.170.618" ...
 $ tot  : Factor w/ 11 levels "4.846.423","4.871.049",..: 1 3 4 5 2 8 7 6 10 9 ...
 $ besch: Factor w/ 9 levels "68,4","68,6",..: 5 7 3 2 2 1 1 4 6 8 ...
 $ usd  : Factor w/ 44 levels "0,68434","0,72584",..: 26 30 29 23 28 22 24 25 15 14 ...

Попытка преобразовать столбец "demo" в числовое значение с помощью

alle$demo <- as.numeric(as.character(alle$demo))

он преобразовал столбец в числовое значение, но теперь строки заполнены символами «NA».

Я думаю, что все столбцы должны быть числовыми. Как я могу преобразовать все 4 столбца в числовые и, наконец, построить линии регрессии.

Данные:

> head(alle,6) demo tot besch usd 1 498.300.775 4.846.423 69,8 1,3705 2 500.297.033 4.891.934 70,3 1,4708 3 502.090.235 4.901.358 69,0 1,3948 4 503.170.618 4.906.313 68,6 1,3257 5 502.964.837 4.871.049 68,6 1,3920 6 504.047.964 5.010.371 68,4 1,2848

спасибо

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Попробуйте сделать это в два шага. Сначала избавьтесь от точек, затем замените запятые десятичными точками и приведите к числовому.

alle[] <- lapply(alle, function(x) gsub("\\.", "", x))
alle[] <- lapply(alle, function(x) as.numeric(sub(",", ".", x)))

Примечание:

Приведенное выше решение разбито на две части для удобства чтения. Следующее делает то же самое, но это займет всего один цикл lapply и поэтому должно быть быстрее, если набор данных большой. Если набор данных является маленьким или средним, возможно, предпочтительнее двухшаговое решение.

alle[] <- lapply(alle, function(x){
  as.numeric(sub(",", ".", gsub("\\.", "", x)))
})
0 голосов
/ 09 мая 2019

С dplyr:

library(dplyr)
alle %>% 
  mutate_all(as.character) %>% 
  mutate_at(c("besch","usd"),function(x) as.numeric(as.character(gsub(",",".",x)))) ->alle
    demo       tot besch    usd
1 498.300.775 4.846.423  69.8 1.3705
2 500.297.033 4.891.934  70.3 1.4708
3 502.090.235 4.901.358  69.0 1.3948
4 503.170.618 4.906.313  68.6 1.3257
5 502.964.837 4.871.049  68.6 1.3920
6 504.047.964 5.010.371  68.4 1.2848
...