当数字以逗号作为小数点分隔符时,将 xlsx 数据导入 R

bla*_*zej 7 excel r readxl

.xlsx当它们的原始小数点分隔符是逗号而不是点时,如何将数据从文件导入到 R 中,以便将数字表示为数字?

在处理 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))
Run Code Online (Sandbox Code Playgroud)

Aar*_*ica 2

我强烈怀疑这些列被读取为字符还有其他原因,很可能它们是可怕的“数字存储为文本”。

对于普通数字(存储为数字),在单个文件或整个系统设置中切换为逗号作为小数分隔符后,readxl::read_excel可以正确读取数字。(这是在我的 Windows 系统上。)即使在向该列或设置中的一个单元格添加字符时col_types="text",我也会使用句点作为小数而不是逗号读取数字,从而提供更多证据表明readxl正在使用内部存储的数据类型。

我让 R 将逗号读取为小数的唯一方法是将数据作为文本而不是数字存储在 Excel 中。(您可以通过在数字前面加上单引号来输入此内容,例如'1,7。)然后,我会在单元格的一角看到一个绿色的小三角形,它会弹出警告“数字存储为文本”。在我的探索中,我惊讶地发现 Excel 会对存储为文本的数字进行计算,因此这不是检查此问题的有效方法。