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

时间:2018-01-05 20:10:59

标签: r excel readxl

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

在处理excel时,我所知道的唯一包是来自readxl的{​​{1}}。

我正在寻找一个不需要在任何其他软件中打开和编辑excel文件的解决方案(并且可以处理数百个要导入的列) - 如果可行的话我可以做到这一点将所有excel导出到tidyverse并使用我知道的工具导入它们,这可以使用.csv参数。

到目前为止,我最好的解决方案是将数字导入为字符,然后对其进行转换:

dec=

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

在处理我从同事那里收到的Excel电子表格时,我遇到了同样的问题。尝试使用readxl导入文件(失败)后,我将文件转换为csv文件,希望使用read_delim来解决该问题,并摆弄语言环境和十进制符号选项。但是无论我使用哪种选项,问题仍然存在。

以下是对我有用的解决方案:我发现包含缺失值(在本例中为.)的单元格中使用的字符引起了麻烦。我回到Excel文件,在所有单元格中将.的缺失值替换为空白,同时保留小数点(,)的默认选项。之后,使用readxl将所有列正确导入为数字。

如果将小数点设置为.时会遇到此问题,请确保在替换缺失值.的所有实例之前在Excel中勾选“匹配整个单元格内容”框>

答案 2 :(得分:0)

很容易更换","用"。"并将列重新编号为数字。例如:

> 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。