【问题标题】:Removing the %sign from rows and converting them to number从行中删除 %sign 并将它们转换为数字
【发布时间】:2019-05-23 12:06:16
【问题描述】:

我正在尝试从我的数据中删除 % 符号并将其转换为数字,然后对它们执行除法。这是我的数据,部分值以数字表示,其他部分以百分比表示。

我尝试使用以下代码删除 % 符号,然后将它们转换为数字。但是,我只想对转换后的数字进行除法。无论如何,我可以检查并仅对其中有 % 符号的行执行除法吗?

这是我的代码

#Reading Files

tab1_data <-  read_excel("Dataset.xlsx", sheet = "tab1")
tab2_data <-  read_excel("Dataset.xlsx", sheet = "tab2")

#tab1_data$new <- subset(tab1_data$`Click percent`,grep("\\%$", tab1_data$`Click percent`))

d = as.numeric(gsub("\\%", "", tab1_data$`Click percent`))

这是转换后的列的输出:

现在,这里的数字 1.14000 理想情况下应该是 0.01146,但事实并非如此。 我尝试对新列中的 % 值进行子集化,然后对它们执行除法。但是我无法对它们进行子集化。

任何人都可以提供任何替代方法来实现删除 %sign 然后对其执行除法的最终目标。

【问题讨论】:

    标签: r type-conversion gsub


    【解决方案1】:

    假设x是你的专栏,

    x <- c(0.02, 0.011, '1.14%', '1.309%')
    

    那么,

    x[grepl('%', x)] <- as.numeric(gsub('%', '', x[grepl('%', x)])) / 100
    x
    #[1] "0.02"    "0.011"   "0.0114"  "0.01309"
    

    as.numeric(x)
    #[1] 0.02000 0.01100 0.01140 0.01309
    

    【讨论】:

      【解决方案2】:

      readr::parse_number(x) 使用 @Sotos 的数据的有趣选项

      x <- c(0.02, 0.011, '1.14%', '1.309%')
      readr::parse_number(x) / c(1, 100)[grepl("%", x) + 1] 
      #[1] 0.0200 0.0110 0.0114 0.0131
      

      如果存在%,则除以100,否则除以1。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        相关资源
        最近更新 更多