簡體   English   中英

當數字有逗號作為小數分隔符時,將 xlsx 數據導入 R

[英]Importing xlsx data to R when numbers have a comma as decimal separator

如何將.xlsx文件中的數據導入 R 以便數字表示為數字,而它們的原始小數分隔符是逗號而不是點?

我知道的唯一 package 在處理 excel 時是來自readxltidyverse

我正在尋找一種不需要在任何其他軟件中打開和編輯 excel 文件(並且可以處理要導入的數百列)的解決方案 - 如果可能的話,我會將所有 excel 導出到.csv並導入它們使用我知道的可以使用dec=參數的工具。

到目前為止,我最好的工作解決方案是將數字作為字符導入,然后對其進行轉換:

library(dplyr)
library(stringr)

var1<- c("2,1", "3,2", "4,5")
var2<- c("1,2", "3,33", "5,55")
var3<- c("3,44", "2,2", "8,88")
df<- data.frame(cbind(var1, var2, var3))

df %>%
      mutate_at(vars(contains("var")),
                str_replace,
                pattern = ",",
                replacement = "\\.") %>%
      mutate_at(vars(contains("var")), funs(as.numeric))

我強烈懷疑這些列被讀取為字符還有其他一些原因,很可能它們是可怕的“數字存儲為文本”。

對於普通數字(存儲為數字),在單個文件或整個系統設置中切換為逗號作為小數分隔符后, readxl::read_excel會正確讀取數字。 (這是在我的 Windows 系統上。)即使將字符添加到該列中的一個單元格或設置col_types="text" ,我也會使用句點作為十進制而不是逗號來讀取數字,從而提供更多證據表明readxl正在使用內部存儲的數據類型。

我讓 R 以逗號作為小數讀取的唯一方法是,當數據作為文本而不是數字存儲在 Excel 中時。 (您可以通過在數字前加上單引號來輸入此內容,例如'1,7 。)然后我在單元格的一角得到一個綠色的小三角形,它會彈出警告“數字存儲為文本”。 在我的探索中,我驚訝地發現 Excel 將對存儲為文本的數字進行計算,因此這不是一種有效的檢查方式。

用“。”替換“,”非常容易。 並將列重鑄為數字。 例子:

> x <- c('1,00','2,00','3,00')
> df <- data.frame(x)
> df
     x
1 1,00
2 2,00
3 3,00
> df$x <- gsub(',','.',df$x)
> df$x <- as.numeric(df$x)
> df
  x
1 1
2 2
3 3
> class(df$x)
[1] "numeric"
> 

只需使用基礎 R 和 gsub。

我在處理從同事那里收到的 Excel 電子表格時遇到了同樣的問題。 在我嘗試使用readxl導入文件(失敗)后,我將文件轉換為csv文件,希望使用read_delim解決問題並擺弄語言環境和十進制符號選項。 但無論我使用哪種選項,問題仍然存在。

這是對我有用的解決方案:我發現在包含缺失值的單元格中使用的字符(在我的例子中是. )造成了麻煩。 我回到 Excel 文件,替換為. 在所有帶有空格的缺失值的單元格中,同時保留小數的默認選項( , )。 之后,所有列都使用readxl正確導入為數字。

如果您將小數設置為. 在替換所有缺失值的實例之前,請務必在 Excel 中勾選“匹配整個單元格內容”框.

使用readxl package 您可以使用locale指定decimal_mark

library(readxl)
read_excel("excel_file.xlsx", locale=locale(decimal_mark = ","))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM