我正在使用此代码从文件夹中读取多个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应该是文本。
感谢。
答案 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
)不匹配。
我希望这会有所帮助。