R 使用一列中的数据将NAs分配给其他列

R 使用一列中的数据将NAs分配给其他列,r,tidyverse,R,Tidyverse,目标:根据另一列的值向列添加NAs。例如,如果我有一个包含五列(一个ID列和四个二进制变量:caseID、var1、var2、var3、nocasedata)的数据集,我如何计算“nocasedata”中的数据以确定TRUE(无数据)或FALSE(数据),然后删除该列并分配NA(如果为TRUE)或不执行任何操作(如果为FALSE)对于其他三个变量,该案例的整行。(首选tidyverse工具,但不是必需的。) 可复制示例: df <- data.frame(caseID = c(1:5),

目标:根据另一列的值向列添加NAs。例如,如果我有一个包含五列(一个ID列和四个二进制变量:caseID、var1、var2、var3、nocasedata)的数据集,我如何计算“nocasedata”中的数据以确定TRUE(无数据)或FALSE(数据),然后删除该列并分配NA(如果为TRUE)或不执行任何操作(如果为FALSE)对于其他三个变量,该案例的整行。(首选tidyverse工具,但不是必需的。)

可复制示例:

df <- data.frame(caseID = c(1:5),
                var1 = c(1, 0, 0, 1, 1),
                 var2 = c(0, 0, 1, 1, 0),
                 var3 = c(0, 0, 0, 1, 1),
                nocasedata = c(0, 1, 0, 0, 0))

df

desired_df <- data.frame(caseID = c(1:5),
                 var1 = c(1, NA, 0, 1, 1),
                 var2 = c(0, NA, 1, 1, 0),
                 var3 = c(0, NA, 0, 1, 1))

desired_df

df根据要求,这里是使用tidyverse工具的解决方案演示


库(tidyverse)
#>--附加包装------------------------------------------tidyverse 1.2.1--
#>v GG2.2.1 v purrr 0.2.4
#>v TIBLE 1.3.4 v dplyr 0.7.4
#>三分之三伏0.7.2伏纵梁1.2.0
#>v读取器1.1.1 v适用于猫0.2.0
#>--冲突---------------------------------------------tidyverse_冲突()--
#>x dplyr::filter()屏蔽stats::filter()
#>x dplyr::lag()屏蔽stats::lag()
df caseID var1 var2 var3 nocasedata
#> 1      1    1    0    0          0
#> 2      2    0    0    0          1
#> 3      3    0    1    0          0
#> 4      4    1    1    1          0
#> 5      5    1    0    1          0
所需的_df=df%>%
在(.vars=vars(var1:var3)处突变,
.funs=funs(ifelse(nocasedata==1,NA,))%>%
选择(-nocasedata)
期望值
#>caseID var1 var2 var3
#> 1      1    1    0    0
#>2娜娜娜娜
#> 3      3    0    1    0
#> 4      4    1    1    1
#> 5      5    1    0    1

Try
df[[df$nocasedata==1,2:4]