R,更改数据框中的列类型

时间:2016-12-23 22:45:42

标签: r excel

我正在使用此代码从文件夹中读取多个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应该是文本。

感谢。

1 个答案:

答案 0 :(得分:2)

这里的主要问题是你让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)不匹配。

我希望这会有所帮助。