[英]Importing xlsx data to R when numbers have a comma as decimal separator
.xlsx
文件中的數據導入 R 以便數字表示為數字,而它們的原始小數分隔符是逗號而不是點? 我知道的唯一 package 在處理 excel 時是來自readxl
的tidyverse
。
我正在尋找一種不需要在任何其他軟件中打開和編輯 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.