[英]Replace row values if sum is equal to zero in R
如果行的總和等於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.
這會將所有等於0的值替換為NA
我也嘗試過使用rowSums()
其他選擇,但沒有找到解決方案。
任何幫助將不勝感激。
謝謝
這個怎么樣?
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
not 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.