Проблема с преобразованием типов из символьных в десятичные числа в R (данные из веб-поиска) - PullRequest
0 голосов
/ 03 февраля 2020

Я предварительно сформировал очистку веб-страниц и получил кадр данных с несколькими символьными векторами, которые я хочу преобразовать в десятичные числовые векторы.

dataframe <- "https://aplikacje.nfz.gov.pl/umowy/AgreementsPlan/GetPlans?ROK=2019&ProviderId=25166&OW=01&OrthopedicSupply=False&Code=3401036&AgreementTechnicalCode=1892709" %>% read_html() %>% html_node("table") %>% html_table()
dataframe[,5] <- as.numeric(dataframe[,5]) # that doesn't work

Например, я хочу преобразовать этот столбец:

head(dataframe[,5])
[1] "147 839 030,03" "147 839 030,03" "147 839 030,03" "147 839 030,03" "147 839 030,03" "147 839 030,03"

в десятичный столбец, чтобы иметь возможность анализировать эти данные. Я хочу, чтобы элементы этого вектора выглядели, например: 147839030.03 (поэтому значение типа цифра c с двумя числами после точки). Это странно для меня, потому что такие функции, как "as.numeri c", "type.convert" не работают. Я также попытался сделать это, сначала заменив пробелы "" на "" и "," на "." применяя gsub () и другие соответствующие функции, но безрезультатно ...

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Я обнаружил, что taRifx библиотека работает для меня. Вы также можете увидеть: ( функция gsub в R не заменяет )

> dataframe <- "https://aplikacje.nfz.gov.pl/umowy/AgreementsPlan/GetPlans?ROK=2019&ProviderId=25166&OW=01&OrthopedicSupply=False&Code=3401036&AgreementTechnicalCode=1892709" %>% read_html() %>% html_node("table") %>% html_table()
> library(taRifx)
> out <- gsub(",", ".", dataframe[,5])
> head(out)
[1] "4 967 679.00" "1 062 094.00" "4 122.00"     "123 136.00"   "0.00"         "24 801.00"   
> out1 <- destring(out)
> head(out1)
[1] 4967679 1062094    4122  123136       0   24801
> typeof(out1)
[1] "double"
1 голос
/ 03 февраля 2020

В base R мы можем заменить пробел (\\s+) пробелом, затем заменить , на . и преобразовать в numeric с as.numeric

out <- as.numeric(sub(",", ".", gsub("\\s+", "", dataframe[,5])))
str(out)
#num [1:158] 4967679 1062094 4122 123136 0 ...
head(out, 5)
#[1] 4967679 1062094    4122  123136       0
...