如果列的值等于0,我想用NA替换列的值。想象一下以下列:
a b
0 0
1 5
2 8
3 7
0 0
5 8
我想通过以下方式替换这些:
a b
NA NA
1 5
2 8
3 7
NA NA
5 8
我一直在寻找许多页面的答案,但没有找到任何解决方案。
这是我到目前为止所尝试的内容:
df[ , 31:36][df[,31:36] == 0 ] <- NA #With df being my dataframe and 31:36 the columns I want to apply the replacement too.
这将NA替换为等于0的所有值
我还尝试过使用rowSums()
的其他替代方案但尚未找到解决方案。
非常感谢任何帮助。
谢谢
答案 0 :(得分:0)
这个怎么样?
a <- df[31:36,1]
b <- df[31:36,2]
c <- a
a[a+b==0] <- NA
b[c+b==0] <- NA
df[31:36,1] <- a
df[31:36,2] <- b
我们必须创建一个名为c
的临时变量,否则当您检查第二列时,您将添加等于NA+0
而不是NA
的{{1}}。< / p>
答案 1 :(得分:0)
使用dplyr
执行此操作的惯用方法是:
library(dplyr)
tb <- tibble(
a = c(0, 1:3, 0, 5),
b = c(0, 5, 8, 7, 0, 8)
)
tb <- tb %>%
# creates a "rowsum" column storing the sum of columns 1:2
mutate(rowsum = rowSums(.[1:2])) %>%
# applies, to columns 1:2, a function that puts NA when the sum of the rows is 0
mutate_at(1:2, funs(ifelse(rowsum == 0, NA, .))) %>%
# removes rowsum
select(-rowsum)
当您将代码应用到实际表格时,您可以用31:36替换1:2。