【问题标题】:R, change column type in a dataframeR,更改数据框中的列类型
【发布时间】:2017-05-09 13:59:09
【问题描述】:

我正在使用此代码从文件夹中读取多个 excel 文件

library(readxl)
file.list <- list.files(pattern='*.xlsx')
df.list <- lapply(file.list, read_excel)
library(dplyr)
df <- bind_rows(df.list, .id = "id")      

我收到了这个错误

Error in bind_rows_(x, .id) : 
  Can not automatically convert from numeric to character in column "c14"

.

C14 列是混合物,在某些文件中只有数字,而其他文件是文本,

有没有办法告诉 R c14 应该是文本。

谢谢。

【问题讨论】:

  • 当我们不知道其他列的数据类型或列数时,很难为您提供帮助。如果知道列数,可以df.list &lt;- lapply(file.list, function(x) read_excel(x, col_types = rep("text", num_cols)));其中num_cols 是列数。获得数据框列表后,您可以对其进行编辑以将数据类型更改为适当的类型。但是如果你知道其他列的数据类型,你可以使用带有col_types参数的数据类型的字符向量。
  • 谢谢,它们是 46 列,我希望所有内容都是文本,因为本练习的目的只是将多个 excel 文件合并到一个 csv 中,然后进一步处理到 PowerQuery 中
  • 那就试试df.list &lt;- lapply(file.list, function(x) read_excel(x, col_types = rep("text", 46)))
  • 得到这个错误 eval(expr, envir, enclos) 中的错误:每列需要一个名称和类型
  • 这可能是here 报告的错误。我最好的选择是read_excel 函数正在读取最后一列(C46 之后)之后的列。

标签: r excel


【解决方案1】:

这里的主要问题是您让read_excel 函数猜测您的 excel 文件的数据类型。但是该功能并不总是正确的。在这种情况下,您的一个或多个文件中似乎有一列包含数字和字符值的混合。正因为如此,猜测有点没弄好。有两种方法可以解决这个问题:

首先,如果您知道每个文件中的列数,您可以这样做:

df.list <- lapply(file.list, function(x) read_excel(x, col_types = rep("text", num_cols)))

其中num_cols 是列数。获得数据框列表后,您可以对其进行编辑以将数据类型更改为适当的类型。

其次,如果您知道其他列的数据类型,您可以使用带有col_types参数的数据类型的字符向量。

编辑:

您的每个文件中似乎有 45 列,所以您可以这样做:

df.list <- lapply(file.list, function(x) read_excel(x, col_types = rep("text", 45)))

如果您遇到以下错误:

eval(expr, envir, enclos) 中的错误:每个都需要一个名称和类型 专栏

请务必返回并检查以确保您实际上拥有与您在脚本中提到的相同数量的列。此错误表示列类型向量的长度(col_types)与列名称向量的长度(col_names)不匹配。

我希望这会有所帮助。

【讨论】:

  • 非常感谢,正在努力学习R,只是为了避免powerquery的限制,没有导出到csv :)
  • 我不熟悉powerquery,但我一定会看看。感谢您让我知道。
  • 当我添加更大的 excel 文件时,我得到这个错误 eval 中的错误(expr,envir,enclos):std::bad_alloc
  • 这是内存分配问题。这基本上意味着readxl 未能为您正在导入的数据分配足够的内存。您是否在使用容量有限的机器,例如虚拟机?
  • 这是一台 8 GA 内存的笔记本电脑,文件很大,其中一些 70 MG。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2022-11-16
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多