R-如何基于

R-如何基于,r,replace,lapply,R,Replace,Lapply,我有一个包含10个变量的数据框。对于变量1-9的每一列,如果该行的第十个变量是NA,我想用NA替换这些值 在执行任何操作之前,数据如下所示: var1 var2 var3 ... var10 1 3 3 2 0 0 0 NA 9 3 7 4 0 0 0 NA . .

我有一个包含10个变量的数据框。对于变量1-9的每一列,如果该行的第十个变量是
NA
,我想用
NA
替换这些值

在执行任何操作之前,数据如下所示:

var1   var2   var3    ...    var10
  1      3     3               2
  0      0     0               NA
  9      3     7               4
  0      0     0               NA
  .      .     .               .
  .      .     .               .
  .      .     .               .
var1   var2   var3    ...    var10
  1      3     3               2
  NA     NA    NA              NA
  9      3     7               4
  NA     NA    NA              NA
  .      .     .               .
  .      .     .               .
  .      .     .               .
目标是使数据看起来像这样:

var1   var2   var3    ...    var10
  1      3     3               2
  0      0     0               NA
  9      3     7               4
  0      0     0               NA
  .      .     .               .
  .      .     .               .
  .      .     .               .
var1   var2   var3    ...    var10
  1      3     3               2
  NA     NA    NA              NA
  9      3     7               4
  NA     NA    NA              NA
  .      .     .               .
  .      .     .               .
  .      .     .               .
我使用的代码如下,每个变量1-9运行一次:

data <- data %>% 
    mutate(var1= replace(var1,         # var1 on this line would be replaced by var2, var3, etc. 
                         which(is.na(var10)), NA))
数据%
mutate(var1=replace(var1,#这一行上的var1将被var2、var3等替换)。
哪一个(是.na(var10)),na))
但是,我相信有更好的方法来实现这一点,而不是将代码复制/粘贴9次,每个变量1-9复制/粘贴一次


一般来说,我对编码比较陌生。似乎基于的东西是适用的,但还没有找到一种方法使其工作。非常感谢任何解决方案

如果我们使用的是
dplyr
,那么可以使用
mutate\u at

data %>%
    mutate_at(1:9, funs(replace(., is.na(data$var10), NA)))

或者我们可以使用
purrr

library(purrr)
map2_df(data[1:9], data[10], ~replace(.x, is.na(.y), NA))

这也可以通过
base R

data[1:9] <- data[1:9]*NA^is.na(data$var10)
数据[1:9]