首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将"X%"-formatted百分比读入R

将"X%"-formatted百分比读入R
EN

Stack Overflow用户
提问于 2021-01-07 01:19:48
回答 2查看 81关注 0票数 0

我正在将CSV读取到R中,其中有几列包含百分比,这些百分比格式化为文本字符串,末尾带有百分比符号,例如"35%“。readr::read_csv()将这些数据解释为字符型数据,但是我希望数据是数值型的,这样就可以执行分析。

下面的代码实现了这一点,但似乎有很多“障碍”要跳过。有没有一个标准函数(或函数的选项)可以做同样的事情?在read_csv()函数中似乎没有相关的选项。

代码语言:javascript
复制
convert_percentage_string <- function(percentage_string) {
  percentage_string %>%
    stringr::str_extract(., "[0-9]+") %>%
    as.numeric()
}

read_csv("my_data.csv") %>% 
  mutate_at(columns_with_percentages, convert_percentage_string)

示例数据:

代码语言:javascript
复制
tribble(~name, ~count, ~percentage, 
   "Alice", 4, "40%", 
   "Bob", 10, "65%", 
   "Carol", 15, "15%")

预期结果:

代码语言:javascript
复制
tribble(~name, ~count, ~percentage, 
       "Alice", 4, 40, 
       "Bob", 10, 65, 
       "Carol", 15, 15)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-07 01:34:32

这是一个dplyrreadr解决方案:

代码语言:javascript
复制
library(dplyr) # Version >= 1.0.0
library(readr)
library(stringr)
data %>% 
   mutate(across(where(~any(str_detect(.,"%"))), parse_number))
# A tibble: 3 x 3
  name  count percentage
  <chr> <dbl>      <dbl>
1 Alice     4         40
2 Bob      10         65
3 Carol    15         15

如果您愿意,请随意使用all替换any

这种方法的一个好处是它可以检测具有%的列,并且只解析这些列。不需要知道需要提前转换哪些列。

票数 1
EN

Stack Overflow用户

发布于 2021-01-07 01:27:28

在使用sapply从数字中删除%符号后,可以将函数as.numeric添加到percentage

代码语言:javascript
复制
df$percentage <- sapply(gsub("(?<=\\d)%", "", df$percentage, perl = T), as.numeric)

或者,如果您更喜欢stringr操作:

代码语言:javascript
复制
df$percentage <- sapply(str_extract(df$percentage, "\\d+"), as.numeric)

结果:

代码语言:javascript
复制
df
# A tibble: 3 x 3
  name  count percentage
  <chr> <dbl>      <dbl>
1 Alice     4         40
2 Bob      10         65
3 Carol    15         15

数据:

代码语言:javascript
复制
df <- tribble(~name, ~count, ~percentage, 
        "Alice", 4, "40%", 
        "Bob", 10, "65%", 
        "Carol", 15, "15%")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65600364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档