【问题标题】:assign a specific values as NA [duplicate]将特定值分配为 NA [重复]
【发布时间】:2020-07-20 15:40:54
【问题描述】:

如何将 df$v2==0 分配为 NA

v1 <- c("1","2","3","4","5")
v2 <- c("a","b","c","d","0")

df <- cbind(v1,v2)
df

预期的答案是

    v1  v2 
[1,] "1" "a"
[2,] "2" "b"
[3,] "3" "c"
[4,] "4" "d"
[5,] "5" "NA"

提前多谢

【问题讨论】:

  • 不要使用cbind,除非您明确希望数据是一个矩阵。在大多数情况下处理数据帧更好,所以使用df &lt;- data.frame(v1,v2, stringsAsFactors = FALSE) 创建数据帧。

标签: r dplyr tidyverse data-manipulation


【解决方案1】:

你可以直接赋值:

df$v2[df$v2 == 0] <- NA
df

#  v1   v2
#1  1    a
#2  2    b
#3  3    c
#4  4    d
#5  5 <NA>

或者使用replaceifelse

df$v2 <- replace(df$v2, df$v2 == 0, NA)
df$v2 <- ifelse(df$v2 == 0, NA, df$v2)

数据

df <- data.frame(v1,v2, stringsAsFactors = FALSE)

【讨论】:

    【解决方案2】:

    使用基础 R

    df[ df$v2 == 0, "v2"] = NA
    

    【讨论】:

      【解决方案3】:

      您还有 data.table(如果您的数据集很大,推荐使用此选项),它使用按引用更新(:= 运算符)

      dt <- data.table('v1' = v1,'v2' = v2)
      dt[v2 == "0", v2 := NA_character_]
      

      顺便说一句,您使用字符,但看起来您可以为v1 使用数字格式

      【讨论】:

        【解决方案4】:

        由于你的 df 实际上是一个字符串matrix,你可以使用:

        df[df[, 2] == "0", 2] <- NA_character_
        

        输出:

        df
             v1  v2 
        [1,] "1" "a"
        [2,] "2" "b"
        [3,] "3" "c"
        [4,] "4" "d"
        [5,] "5" NA 
        

        但我会推荐这里发布的data.frame 解决方案之一。

        数据:

        v1 <- c("1","2","3","4","5")
        v2 <- c("a","b","c","d","0")
        df <- cbind(v1,v2)
        

        【讨论】:

          猜你喜欢
          • 2015-08-27
          • 2017-08-11
          • 1970-01-01
          • 1970-01-01
          • 2017-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多