R语言 基于第二组列替换多列中的值

w6lpcovy  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(122)

我在R Dataframe 中有两组二进制变量(X和Y)。X变量包含Y中的值是否有效(1)或无效(0)的信息。我想使用X变量作为掩码,并将Y变量的所有无效单元格替换为NA,其中对应的X变量为0。
简化示例:

input <- tibble(X1 = c(1,1,0,1), X2 = c(1,1,1,0), X3 = c(0,0,0,1), Y1 = c(1,0,1,1), Y2 = c(1,1,0,0), Y3 = c(0,0,0,0))
output <- tibble(Z1 = c(1,0,NA,1), Z2 = c(1,1,0,NA), Z3 = c(NA,NA,NA,0))
kqlmhetl

kqlmhetl1#

我们可以利用潮汐宇宙。

library(stringr)
library(purrr)
library(dplyr)

input %>%
    split.default(str_remove_all(names(.), '\\d+')) %>%
    pmap_dfc(~ifelse(.x==1, .y, NA)) %>%
    rename_with(~paste0('Z', seq_len(length(.))))

# A tibble: 4 × 3
     Z1    Z2    Z3
  <dbl> <dbl> <dbl>
1     1     1    NA
2     0     1    NA
3    NA     0    NA
4     1    NA     0
ztyzrc3y

ztyzrc3y2#

下面是一个R基溶液:

output <- input[, 4:6]
output[input[, 1:3] == 0] <- NA
names(output) <- paste0("Z", 1:3)

结果:

# A tibble: 4 × 3
     Z1    Z2    Z3
  <dbl> <dbl> <dbl>
1     1     1    NA
2     0     1    NA
3    NA     0    NA
4     1    NA     0

相关问题