【问题标题】:read_excel won't trim whitespaceread_excel 不会修剪空格
【发布时间】:2017-10-23 19:21:42
【问题描述】:

我正在使用包 readxl 来加载一个 excel 文件。默认情况下,它应该去除空白,但它没有这样做。

该文件可以直接从下面的链接下载,也可以通过附录 B 的网站下载

http://www2.nationalgrid.com/UK/Industry-information/Future-of-Energy/Electricity-Ten-Year-Statement/

http://www2.nationalgrid.com/WorkArea/DownloadAsset.aspx?id=8589937799

require(readxl);require(tidyverse)
test <- read_excel("ETYS 2016 Appendix B.xlsx", skip = 1, sheet = 22, trim_ws = TRUE)
print(test$`MVAr Generation`)
test$`MVAr Generation` %>% str_count(patter = "\\s")

test$`MVAr Generation` %>% table #all are numeric
test$`MVAr Generation` %>% class #however the class is characer

test$`MVAr Generation` %>% str_count(patter = "\\s") %>%
sum(na.rm = T) #It should be 0 however it is 2 

这个问题导致分析出现问题,从这个数字列是一个字符的例子可以看出。 帮助将不胜感激

【问题讨论】:

    标签: r tidyverse readxl


    【解决方案1】:

    @troh 对字符编码的见解让我想到了使用正则表达式。 @jaySF 在整个数据框中的应用程序是同时处理所有列的好方法。这两个建议将我引向以下答案。

    require(dplyr);require(purrr);require(readr)
    RemoveSymbols <-function(df)  {
      df  %>% mutate_all( funs(gsub("^[^A-Z0-9]", "", ., ignore.case = FALSE))) %>%
         map_df(parse_guess) 
    }
    
    test2 <- RemoveSymbols(test)
    
    sapply(test2,class)
    

    【讨论】:

      【解决方案2】:

      也许这就是你想要的:

      library(xlsx)
      test <- read.xlsx("ETYS 2016 Appendix B.xlsx", sheetName = 22, 
                    colIndex = 1:7, startRow = 2, header = TRUE, 
                    stringsAsFactors = FALSE)
      
      # remove whitespace
      test <- data.frame(lapply(test, function(y) {
                 y <- gsub("^\\s+", "", y); 
                 y <- gsub("Â", "", y); y
                 y <- gsub("^\\s+", "", y); 
                 }))
      
      # set tidy cols to numeric
      cols = c(3, 4, 5, 7)
      test[,cols] = apply(test[,cols], 2, function(x) as.numeric(x))
      
      # test
      class(test$Unit.Number)
      test$MVAr.Absorption
      

      【讨论】:

        【解决方案3】:
        library(readxl)
        
        readxl::excel_sheets('ETYS 2016 Appendix B.xlsx')[22]
        test <- read_excel("ETYS 2016 Appendix B.xlsx", skip = 1, sheet = 22, 
                           trim_ws = FALSE)
        test$`MVAr Generation` <- as.numeric(gsub('^\\s', "", test$`MVAr Generation`))
        

        错误可能是由于字符编码。当我强制对列进行数字解释时出现此错误:

        Expecting numeric in D9 / R9C4: got 'Â 225'
        

        您可以通过用gsub 替换前导空格来手动避免这种情况。

        【讨论】:

        • 使用无法识别的符号是个好主意,但是这也会删除带有空格的数字,因此不起作用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        • 2014-12-25
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        相关资源
        最近更新 更多