繁体   English   中英

使用“tidyverse”替换列中的 NA 值无法正常工作,也不会给出错误消息。 [R]

[英]Using "tidyverse" to replace NA values in columns not working correctly nor giving an error message. [R]

我正在尝试用“UNK”替换列中的 NA 值,以便能够执行逻辑回归。

这里分别是代码和它们的输出。 我只想列出我为上下文采取的每个步骤(重要的是要注意我没有包括每一列,但所有列都会发生同样的问题):

donors <- read_csv("donors.csv", col_types = "nnffnnnnnnnnffffffffff")

glimpse(donors) 
Rows: 95,412
Columns: 22
$ age                     <dbl> 60, 46, NA, 70, 78, NA, 38, ~
$ numberChildren          <dbl> NA, 1, NA, NA, 1, NA, 1, NA,~
$ incomeRating            <fct> NA, 6, 3, 1, 3, NA, 4, 2, 3,~

在这里,我只是挑出了分解的特征,以便更清楚地看到它们:

donors %>% keep( is.factor) %>% summary()
  incomeRating    wealthRating   inHouseDonor 
 NA     :21286   NA     :44732   FALSE:88709  
 5      :15451   9      : 7585   TRUE : 6703  
 2      :13114   8      : 6793                
 4      :12732   7      : 6198                
 1      : 9022   6      : 5825                
 3      : 8558   5      : 5280                
 (Other):15249   (Other):18999    

现在,我尝试将 incomeRating 列(和其他列)中的所有 NA 值替换为“UNK”:

donors <- donors %>% mutate( incomeRating = as.character( incomeRating)) 
%>% mutate( incomeRating = as.factor( ifelse( is.na( incomeRating), 'UNK', incomeRating)))

没有错误消息,但是当我像这样检索比例值表时,NA 不会被替换:

donors%>%
  select(incomeRating) %>%
  table() %>%
  prop.table()
         1          2          3          4          5 
0.09455834 0.13744602 0.08969522 0.13344233 0.16193980 
         6          7         NA 
0.08152014 0.07830252 0.22309563 

同样,所有列都会发生这种情况。 我相信 R 将 NA 读取为实际值,因此我不能使用 is.na() 命令读取这些值。 如果是这种情况,解决方案是什么? 提前谢谢你。

尝试来自fct_explicit_na forcats的 fct_explicit_na:代码未测试!

library(forcats)
library(dplyr)

donors <- donors %>% 
  mutate(incomeRating = fct_explicit_na(incomeRating, "UNK")

暂无
暂无

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

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