首页 > 解决方案 > 如何调整 read_excel 使千位分隔符不更改为小数点?

问题描述

目前,我使用以下代码将 Excel 文件(存储在我的 PC 上的文件夹中)存储在列表中。

decrease_names <- list.files("4_large_decreases",pattern = ".xlsx",full.names = T)
decrease_list <- sapply(decrease_names,read_excel,simplify = F)

之后,我使用以下代码将数据框组合成一个对象。

decrease <- decrease_list %>% 
  keep(function(x) nrow(x) > 0) %>% 
  bind_rows()

我遇到的问题是存储在文件夹中的 Excel 文件包含小数点(点“。”)以及千位分隔符(逗号“,”)。我认为 R(尤其是 read_excel() )将千位分隔符转换为小数点,这会导致数据不正确。

虽然我知道我可以先在 Excel 中删除千位分隔符,但这会导致大量手动工作,因此我对识别千位分隔符并保持其完整(或删除它,目标是保持数据的性质正确)。

编辑:正如@dario 建议的那样decrease_list,我在运行代码后添加了一个存储在其中的 tibble 片段。片段如下所示:

Raised   Avg. change
526.000  2.04
186.000  3.24
...

在栏目中提出“。” 以前是“,”,现在变成了“.”。这 ”。” 平均 变化是一个“。” 已经。

标签: r

解决方案


假设每个excel文件都包含相同格式的数据,那么我们可以应用如下代码:

library(tidyverse)
library(readxl)

decrease_names <- list.files("4_large_decreases",pattern = ".xlsx",full.names = T)

# 10 columns as written in your comment
decrease <- sapply(decrease_names, readxl::read_excel, col_types = rep("text", 10L), simplify = F)

# Not tested
decrease <- decrease_list %>% 
  keep(function(x) nrow(x) > 0) %>% 
  bind_rows() %>%
  mutate(across(where(is.character), ~ as.numeric(gsub("\\,", "", .x))))

推荐阅读