简体   繁体   English

有条件地替换 R 中的值

[英]Conditional replacement of values in R

I have a question in R.我在 R 有一个问题。 I have a dataset whose cells I would like to change based on the value of the column next to each other我有一个数据集,我想根据相邻列的值更改其单元格

Data <- tibble(a = 1:5,  
b = c("G","H","I","J","K"),
c = c("G","H","J","I","J"))

I would like to change the chr.我想改变chr。 to NA if b and c have the same chr.如果 b 和 c 具有相同的字符,则为 NA。

Desired output所需 output

Data <- tibble(a = 1:5,  
    b = c("NA","NA","I","J","K"),
    c = c("NA","NA","J","I","J"))

Thanks a lot for your help in advance.非常感谢您提前提供的帮助。

library(data.table)
setDT(Data)[b == c, c("b", "c") := NA]
#    a    b    c
# 1: 1 <NA> <NA>
# 2: 2 <NA> <NA>
# 3: 3    I    J
# 4: 4    J    I
# 5: 5    K    J

With base R:带底座 R:

Data[Data$b == Data$c, c('b', 'c')] <- "NA"
Data
# # A tibble: 5 x 3
#       a b     c    
# <int> <chr> <chr>
# 1     1 NA    NA   
# 2     2 NA    NA   
# 3     3 I     J    
# 4     4 J     I    
# 5     5 K     J  

Using which to subset Data on the rows where b and c have the same values:使用whichbc具有相同值的行上的Data进行子集化:

Data[c("b","c")][which(Data$b == Data$c),] <- NA

Result:结果:

Data
# A tibble: 5 x 3
      a b     c    
  <int> <chr> <chr>
1     1 NA    NA   
2     2 NA    NA   
3     3 I     J    
4     4 J     I    
5     5 K     J 

With dplyrdplyr

library(dplyr)
Data %>%
  rowwise() %>% 
  mutate(b = ifelse(b %in% c & c %in% b, "NA", b))%>%
  mutate(c = ifelse(b == "NA", "NA", c))

Output: Output:

      a b     c    
  <int> <chr> <chr>
1     1 NA    NA   
2     2 NA    NA   
3     3 I     J    
4     4 J     I    
5     5 K     J    

Another base R option另一个基地 R 选项

cols <- c("b", "c")
Data[cols] <- replace(Data[cols], Data[cols] == Data[rev(cols)], NA)

gives

> Data
# A tibble: 5 x 3
      a b     c
  <int> <chr> <chr>
1     1 NA    NA
2     2 NA    NA
3     3 I     J
4     4 J     I
5     5 K     J

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM