用NA值替换负数值

6

我有一个表格,其中包含正数、负数和NA值。我需要将负数替换为NA值,但是正数和NA值应该保持不变。我的数据集类似于以下示例:

NO. q
1   NA
2   NA
3   -133.6105198
4   -119.6991209
5   28.84460104
6   66.05345087
7   84.7058947
8   -134.4522694
9   NA
10  NA
11  73.20465643
12  -69.90723514
13  NA
14  69.70833003
15  65.27859906

我尝试了这个:

if (q>0) {
    q=NA
} else {
    q=q
}

数据如下:这里的“q”是列名 NA NA -133.6105198 -119.6991209 28.84460104 66.05345087 84.7058947 -134.4522694 NA NA 73.20465643 -69.90723514 NA 69.70833003 65.27859906 - Tika Ram Gurung
你好,感谢提问。由于您是新用户,您可能想阅读一下“导览”,并选择覆盖您问题的最佳答案(每个答案旁边都有绿色的勾),或者如果没有答案完全符合您的需求,您可以提供更多信息。 - codingEnthusiast
4个回答

12

或者使用 replace

> df$q2 <- replace(df$q, which(df$q < 0), NA)
> df
   NO.          q       q2
1    1         NA       NA
2    2         NA       NA
3    3 -133.61052       NA
4    4 -119.69912       NA
5    5   28.84460 28.84460
6    6   66.05345 66.05345
7    7   84.70589 84.70589
8    8 -134.45227       NA
9    9         NA       NA
10  10         NA       NA
11  11   73.20466 73.20466
12  12  -69.90724       NA
13  13         NA       NA
14  14   69.70833 69.70833
15  15   65.27860 65.27860

或者使用data.table:

library(data.table)
setDT(df)[q < 0, q := NA]

或者在 dplyr 管道中使用 replace:

library(dplyr)
df %>% mutate(q = replace(q, which(q<0), NA))

我该如何调整dplyr的解决方案,使其适用于整个数据集? - KC15
mutate(across(everything(), function(x){replace(x, which(x<0), NA)})) - Tom Bishop

9
您可以尝试这个方法:
sample <- c(1, -2, NA)
sample[sample < 0] <- NA
sample
[1]  1 NA NA

如果您使用的是data.frame(假设其名为df):
df$q[df$q < 0] <- NA

6

你可以尝试

df1$q1 <- NA^(df1$q <0) * df1$q
df1
#   NO.          q       q1
#1    1         NA       NA
#2    2         NA       NA
#3    3 -133.61052       NA
#4    4 -119.69912       NA
#5    5   28.84460 28.84460
#6    6   66.05345 66.05345
#7    7   84.70589 84.70589
#8    8 -134.45227       NA
#9    9         NA       NA
#10  10         NA       NA
#11  11   73.20466 73.20466
#12  12  -69.90724       NA 
#13  13         NA       NA
#14  14   69.70833 69.70833
#15  15   65.27860 65.27860

或者使用ifelse

 with(df1, ifelse(q < 0, NA, q))

或者

 is.na(df1$q) <- df1$q < 0

q[which(q < 0)] <- NA - Tika Ram Gurung
@TikaRamGurung 你可以使用任何一种解决方案来获得结果,“which”并不是必需的,q[q<0] <- NA也可以像naltipar所示那样工作。 - akrun

1
另一种实现相同效果的方式是(现在我发现这与akrun的另一个答案几乎相同,对此感到抱歉)
daf$q = ifelse(daf$q < 0, NA_real_, daf$q)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接