2016-08-12 51 views
0

我一般喜欢R,但类型转换问题让我发疯。在R:混合数据类型的数据帧的类型转换

以下问题:

我从数据库连接中读取数据帧。结果是一个包含字符列的数据框。

我知道第一列是日期格式 - 所有其他都是数字。但是,无论我如何将数据框的字符列转换为正确的类型,都无法解决问题。

将数据帧转换为矩阵然后返回到数据框中后,所有列都变为类型因子 - 并将因子转换为数值创建错误结果,导致因子级别的索引被转换而不是真实值。

此外,如果表大小很大 - 我不想手动转换每列。没有办法让它自动完成吗?

+0

如果您通过'read.table'读取表,则可以指定参数'colClasses',该参数应该是列的假定类的向量。有关更多信息,请参阅'read.table'。 – Vandenman

+0

这可能有助于这种情况。但它不会自动地转换一列列。这是一种手动程序。 – CodingButStillAlive

回答

1

我们可以通过使用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}) 
+0

谢谢!这个程序实际上解决了这个问题。但是我想知道是否真的需要这样的努力(定义你自己的函数并在字符和其他类型之间来回转换) – CodingButStillAlive

+0

@ user1881788你可以使用'library(readr)'中的'read_csv',它应该自动选择增加列类。 – akrun