繁体   English   中英

R - NA 将列转换为字符 class(应该是整数/数字)

[英]R - NAs turn columns into character class (should be integer/ numeric)

我导入了一个包含大量缺失值或 N/A、NA 的庞大数据集。

这就是我导入数据的方式:

Databsp<-read.csv("C:/Users/adminfor/Desktop/Neuer Ordner/Pseudonymized-Genet-Treatment-Summary-20220201120538.csv", na.strings=TRUE)

接下来,我将所有 NA 或 N/As 转换为使用以下代码:

a <- Databsp %>% replace_with_na_all(condition = ~.x %in% common_na_strings)

现在我的问题是:为什么列只包含来自 class “字符”而不是“整数/数字”的数字和 NA。 我尝试了几个代码,但似乎没有任何帮助......

您不会更改列类。 导入数据时,首先设置列类,您无需更改它们。 如果 CSV 文件中的一列在您导入时只有数字和NA值,则它将是数字。 但是如果它有字符串(包括你还没有告诉 R 是 NA 等效的字符串,比如"N/A" ),那么read.csv必须将它们读取为character ZA2F2ED4F8EBC2CBB4C21A29DC40AB6 因为它们不是数字。 稍后,您将这些 NA 等效值替换为实际NA ,但这仅替换值,它不会更改列的 class 。

糟糕的解决方案是修补它。 替换 NA 值后添加一个额外步骤,您可以使用type.convert() function 重新评估列并根据需要转换它们, a <- type.convert(a)

更好的解决方案是在读取数据时为read.csv提供 NA 等效字符串列表。 这就是na.strings参数应该是什么。 ?read.csv

na.strings
要解释为NA值的字符串的字符向量。

因此,将您的导入行更改为

Databsp <- read.csv(
  "C:/Users/adminfor/Desktop/Neuer Ordner/Pseudonymized-Genet-Treatment-Summary-20220201120538.csv",
   na.strings = common_na_strings
)

然后,当您读入这些列时,它们应该被适当地分类,并且您可以跳过replace_with_na_all步骤,因为它已经被处理了。 相关地,您当前的na.strings = TRUE什么都不做,因为TRUE不是字符向量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM