【问题标题】:how to convert a price character vector to a numeric vector如何将价格字符向量转换为数值向量
【发布时间】:2021-10-31 19:37:03
【问题描述】:

我声明我是新手。 我有一个单列(字符)数据框,我想在其上找到最小值、最大值 和平均价格。 min () 和 max () 函数也适用于字符向量,但均值 () 或中值 () 函数需要一个数值向量。我试图用句号改变逗号 但是当我有成千上万的价格时,问题变得更加复杂。我该怎么办?

>price
                 Price
    1      1.651
    2   2.229,00
    3   1.899,00
    4   2.160,50
    5   1.709,00
    6   1.723,86
    7   1.770,99
    8   1.774,90
    9   1.949,00
    10  1.764,12

这是数据框。我感谢任何想提前帮助我的人

【问题讨论】:

  • 欢迎来到 SO。始终最好提供能够重现您的数据的代码(dput(price) 在这里可能会有所帮助)。

标签: r dataframe


【解决方案1】:

, 替换为.,将. 替换为空字符串并将值转换为数字。

在基础 R 中使用 gsub -

df <- transform(df, Price = as.numeric(gsub(',', '.', 
                            gsub('.', '', Price, fixed = TRUE), fixed = TRUE)))

#     Price
#1  1651.00
#2  2229.00
#3  1899.00
#4  2160.50
#5  1709.00
#6  1723.86
#7  1770.99
#8  1774.90
#9  1949.00
#10 1764.12

您也可以使用readr 中的parse_number 号码功能。

library(readr)
df$Price <- parse_number(df$Price, 
             locale = locale(grouping_mark = ".", decimal_mark = ','))

数据

如果您在reproducible format 中提供数据会更容易提供帮助

df <- structure(list(Price = c("1.651", "2.229,00", "1.899,00", "2.160,50", 
"1.709,00", "1.723,86", "1.770,99", "1.774,90", "1.949,00", "1.764,12"
)), class = "data.frame", row.names = c(NA, -10L))

【讨论】:

    【解决方案2】:
    url <- "https://www.shoppydoo.it/prezzi-notebook-mwp72t$2fa.html?src=user_search"
    
      page <- read_html(url)
    
       price <- page %>% html_nodes(".price") %>% html_text() %>% data.frame()
    
       colnames(price) <- "Price"
       price$Price <- gsub("da ", "", price$Price)
       price$Price <-gsub("€", "",  price$Price)
       price$Price <-gsub(".", "",  price$Price
    

    )

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    【解决方案3】:

    我们可以在base R 中使用chartr

    df$Price <-  with(df, as.numeric(sub(",", "", chartr('[.,]', '[,.]', df$Price))))
    

    数据

    df <- structure(list(Price = c("1.651", "2.229,00", "1.899,00", "2.160,50", 
    "1.709,00", "1.723,86", "1.770,99", "1.774,90", "1.949,00", "1.764,12"
    )), class = "data.frame", row.names = c(NA, -10L))
    

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 2023-04-01
      • 2019-10-26
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多