我一般喜欢R,但类型转换问题让我发疯。在R:混合数据类型的数据帧的类型转换
以下问题:
我从数据库连接中读取数据帧。结果是一个包含字符列的数据框。
我知道第一列是日期格式 - 所有其他都是数字。但是,无论我如何将数据框的字符列转换为正确的类型,都无法解决问题。
将数据帧转换为矩阵然后返回到数据框中后,所有列都变为类型因子 - 并将因子转换为数值创建错误结果,导致因子级别的索引被转换而不是真实值。
此外,如果表大小很大 - 我不想手动转换每列。没有办法让它自动完成吗?
我一般喜欢R,但类型转换问题让我发疯。在R:混合数据类型的数据帧的类型转换
以下问题:
我从数据库连接中读取数据帧。结果是一个包含字符列的数据框。
我知道第一列是日期格式 - 所有其他都是数字。但是,无论我如何将数据框的字符列转换为正确的类型,都无法解决问题。
将数据帧转换为矩阵然后返回到数据框中后,所有列都变为类型因子 - 并将因子转换为数值创建错误结果,导致因子级别的索引被转换而不是真实值。
此外,如果表大小很大 - 我不想手动转换每列。没有办法让它自动完成吗?
我们可以通过使用lapply
循环遍历数据集的列来使用type.convert
。将列转换为character
并应用type.convert
。如果是character
课程,它将转换为factor
,我们可以将其重新转换为Date
课程(因为只有一列有character
课程,不确定'Date'课程的格式,所以如果它是一种不同的格式,在as.Date
中指定format
参数)。
df1[] <- lapply(df1, function(x) {x1 <- type.convert(as.character(x))
if(is.factor(x1))
as.Date(x1) else x1})
谢谢!这个程序实际上解决了这个问题。但是我想知道是否真的需要这样的努力(定义你自己的函数并在字符和其他类型之间来回转换) – CodingButStillAlive
@ user1881788你可以使用'library(readr)'中的'read_csv',它应该自动选择增加列类。 – akrun
如果您通过'read.table'读取表,则可以指定参数'colClasses',该参数应该是列的假定类的向量。有关更多信息,请参阅'read.table'。 – Vandenman
这可能有助于这种情况。但它不会自动地转换一列列。这是一种手动程序。 – CodingButStillAlive