簡體   English   中英

如果R中的總和等於零,則替換行值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM