用NA替换自定义值

问题描述 投票:1回答:2
df = data.frame("a" = c(1, 2, 3, "q", "r"),
                "b" = c(5,6,7,0,"s"))
dfWANT = data.frame("a" = c(1, 2, 3, "NA", "NA"),
                    "b" = c(5,6,7,0,"NA"))
REP = c("q", "r", "s")

df[,][df[,] == REP] <- NA

我的目的是指定一个列表(REP),该列表具有要设置为NA的分数。原始数据是df,而我想要的是dfWANTREP是我想设置为NA的值的向量,最后一行是我的尝试,仅在col a上有效。

r dataframe missing-data
2个回答
3
投票

您可以使用sapply根据其中存在TRUE值来获取FALSE / REP值的逻辑矩阵。然后,我们可以将这些TRUE值替换为NA

df[sapply(df, `%in%`, REP)] <- NA

#     a    b
#1    1    5
#2    2    6
#3    3    7
#4 <NA>    0
#5 <NA> <NA>

dplyr中,我们可以使用mutate_all

library(dplyr)
df %>% mutate_all(~replace(., . %in% REP, NA))

0
投票

我们可以将data.frame转换为matrix并执行%in%,而无需循环base R

df[`dim<-`(as.matrix(df) %in% REP, dim(df))] <- NA
df
#     a    b
#1    1    5
#2    2    6
#3    3    7
#4 <NA>    0
#5 <NA> <NA>
© www.soinside.com 2019 - 2024. All rights reserved.