read_excel不会去除空格

3
我正在使用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 

这个问题会在分析中造成麻烦,就像这个例子中的数字列实际上是字符一样。 需要帮助。
3个回答

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手动替换前导空格来避免这种情况。

好主意,不过这会删除带有空格的数字,所以不起作用。 - Jonno Bourne

1
也许这就是你想要的:

(保留HTML,不做解释)
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

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接