用未知替换NA

时间:2019-04-29 21:07:46

标签: r dplyr

我正在尝试替换NA's数据帧的GENDER_M列的objeto1

以下各项均无效:

replace_na(objeto1$GENDER_M, "unknown")

mutate(GENDER_M = replace_na(GENDER_M, "unknown"))

mutate(objeto1, GENDER_M = ifelse(is.na(GENDER_M), "unknown", GENDER_M))

replace(is.na(GENDER_M), "unknown")

是的,我已经读过this page和其他十几本书。

有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

所有tidyverse函数都返回修改后的数据帧,它们不会在适当位置修改它,因此您需要在返回值时为其赋值。如果我们创建一个示例数据框:

df <- structure(list(mpg = c(21, 21, 22.8, 21.4, NA, NA), cyl = c(6, 
6, 4, 6, 8, 6)), class = "data.frame", row.names = c(NA, -6L))

   mpg cyl
1 21.0   6
2 21.0   6
3 22.8   4
4 21.4   6
5   NA   8
6   NA   6

我们可以通过几种方式替换NA:

df <- df %>%
    replace_na(list(mpg = 'unknown'))

df <- df %>%
    mutate(mpg = ifelse(is.na(mpg), 'unknown', mpg))

两者都返回相同的内容:

df
      mpg cyl
1      21   6
2      21   6
3    22.8   4
4    21.4   6
5 unknown   8
6 unknown   6

您还可以使用基数R:

df[is.na(df)] <- 'unknown'

当心::这样做有风险:数据框中的每个变量只能具有一种类型(即numericlogicalcharacter )。在这些变量中添加character值将导致整个变量转换为character,这在将来尝试进行数值计算时可能会引起问题。这就是为什么在识别丢失的数据时,优先使用特殊值NA而不是其他值的原因。