【问题标题】:How properly convert vector of numbers written as character into numeric type?如何正确地将写为字符的数字向量转换为数字类型?
【发布时间】:2019-08-01 17:51:05
【问题描述】:

我的 R 代码有问题。 我想将向量powpow 中作为字符写入的数字转换为实数。像往常一样我使用as.numeric() 函数,但我不知道为什么它不起作用。

这是我的代码,如果有人知道如何解决我的问题,请写出来。 提前致谢。

有问题的部分是以评论“# średnia i kwantyle powierzchni powiatów woj. wlkp.”开头

############################################################

### Zadanie 1 ###
library(rvest)
library(tidyverse)
library(magrittr)
url <- "https://pl.wikipedia.org/wiki/Wojew%C3%B3dztwo_wielkopolskie"
website_html <- url %>% read_html()
tbls <- website_html %>% html_nodes("table")
tabele <- tbls[11] %>% html_table() %>% as.data.frame()
head(tabele)
tabele <- tabele[, -1]
head(tabele)
length(colnames(tabele))
nazwy <- colnames(tabele)
nazwy[1] <- 'powiat'
nazwy[2] <- 'siedziba'
nazwy[3] <- 'ludnosc'
nazwy[4] <- 'powierzchnia'
nazwy[5] <- 'gestosc'
nazwy[6] <- 'urbanizacja'
nazwy[7] <- 'wyd_budzet'
nazwy[8] <- 'doch_budzet'
nazwy[9] <- 'zadluzenie'
nazwy[10] <- 'stopa'
nazwy -> colnames(tabele)
head(tabele)
powiaty <- tabele # rm(tabele)


# średnia i kwantyle powierzchni powiatów woj. wlkp.
str(powiaty$powierzchnia)
powpow <- powiaty$powierzchnia
str(powpow)

for(i in 1:length(powpow))
{
  powpow[i] <- powpow[i] %>% gsub("\\,", "\\.", ., perl=TRUE) %>% as.numeric()
  print(str(powpow[i]))
}


我想要的是一个由数字组成的powpow 向量,而不是字符。

【问题讨论】:

    标签: r type-conversion


    【解决方案1】:

    根据您的全局设置,您可能需要将, 替换为. 作为小数分隔符。一个简单的解决方案是as.numeric():

     # if your global settings accept "," as a decimal separator 
    powpow_numeric <- as.numeric(powpow)
    
    # if your global settings do NOT accept "," as a decimal separator
    powpow_numeric <- as.numeric(sub(",", ".", powpow, fixed = T)) 
    

    如果第一个选项不起作用,还有一种方法可以更改您的全局设置,但我不知道它是否在我的脑海中。也许其他人可以帮助解决这个问题。

    【讨论】:

      【解决方案2】:

      您已经加载了 tidyverse 包。您可以使用 readr 中的 de parse_number() 函数并从 powpow 中获取数字向量。

      parse_number(powpow)
      

      as.numeric(powpow) 可以做同样的事情,但解析数字将在向量包含非数字字符(如字母)的情况下起作用。

      无论如何,根据你所做的,我对所有其他变量进行了如下操作:

      powiaty <- powiaty %>%
          mutate(powierzchnia = parse_number(powierzchnia),
                 urbanizacja = parse_number(urbanizacja),
                 wyd_budzet = parse_number(wyd_budzet),
                 doch_budzet = parse_number(doch_budzet),
                 # in the case of "zadluzenie" and "stopa" we have to change ',' by dots before parsing
                 zadluzenie = str_replace(zadluzenie, ",", "\\."),
                 stopa = str_replace(stopa, ",", "\\."),
                 zadluzenie = parse_number(zadluzenie),
                 stopa = parse_number(stopa)) 
      
      glimpse(powiaty)
      
      

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 2018-12-07
        • 2018-08-16
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 2020-01-24
        相关资源
        最近更新 更多