首页 > 解决方案 > 当其值都相同时,列类型更改为“未知”

问题描述

当我创建数据框时,每行中具有相同值的列会自动设置为“未知”类型,并且无法更改它。

下面是一个示例,以便您更好地理解:

data <- data.frame(c(1,1,1,1), c(1:4), c(4:1))
colnames(data) <- c("Not Working", "Ok", "Ok")

这种数据框的第一列(“不工作”)填充了相同的值(全为 1)。当您运行代码时,您会注意到它的类型是“未知”,而其他类型则自动设置为“数字”。

但是,如果您尝试更改它,则没有任何效果。例如:

data$`Not Working` <- as.numeric(data$`Not Working`)
data$`Not Working` <- as.numeric(as.character(data$`Not Working`))

您将看到使用这两个代码字符串的列类型仍然相同。既不使用括号而不是美元符号来改变任何东西。每当一列的所有值都相等时,就会发生这种情况。我还尝试先将数据框转换为矩阵,然后再转换为数据框,或者先将列转换为因子(即使对于我的特定类型的数据没有意义),然后再转换为数字,但没有任何效果。

虽然这对于经典的 R 脚本来说不是问题,但当我尝试编织文件时它变得至关重要,返回以下错误:

"Error [...]: replacement has length zero"

经过几次测试,我发现错误是特定于应该是数字的列类型。我已经正确安装了 R markdown 和 Latex,所以应该没什么。

有谁知道为什么会发生这种情况以及是否有办法解决它?它看起来像一个错误或其他东西,但我已经尝试将程序更新为最新版本,但没有任何变化。

标签: rdataframer-markdownknitrcolumn-types

解决方案


首先,您不应该有两个具有相同名称的列。我建议您使用tibble来创建数据框。

library(tibble)
data <- tibble("Not Working" = c(1,1,1,1), "Ok" = c(1:4), "Oki" = c(4:1))

sapply(data, class) #check the data types

如果您想将列的数据类型更改为特定的内容,您可以轻松地指定它。

data <- tibble("Not Working" = as.character(c(1,1,1,1)), "Ok" = c(1:4), "Oki" = c(4:1))

推荐阅读