R 基于其他列组中的值更改列组

R 基于其他列组中的值更改列组,r,dplyr,tidyr,mutate,R,Dplyr,Tidyr,Mutate,我试图根据另一个对应列中的值是否为NA将一列中的值转换为NA。我需要对两大组对应的列执行此操作,这样我就不能逐个对每个列进行变异 例如,下面的2002inflationNext2Years变为NA,因为2002realReturnNext2Years是NA year <- c(2000, 2001, 2002) realReturnNext1Years <- c(.1,.2,.3) realReturnNext2Years <- c(.15,.25, NA) realRetur

我试图根据另一个对应列中的值是否为
NA
将一列中的值转换为
NA
。我需要对两大组对应的列执行此操作,这样我就不能逐个对每个列进行
变异

例如,下面的2002
inflationNext2Years
变为
NA
,因为2002
realReturnNext2Years
NA

year <- c(2000, 2001, 2002)
realReturnNext1Years <- c(.1,.2,.3)
realReturnNext2Years <- c(.15,.25, NA)
realReturnNext3Years <- c(.45, NA, NA)
inflationNext1Years <- c(.02, .03, .07)
inflationNext2Years <- c(.03, .05, .08)
inflationNext3Years <- c(.04, .06, .09)
data <- data.frame(year, realReturnNext1Years, realReturnNext2Years, realReturnNext3Years, inflationNext1Years, inflationNext2Years, inflationNext3Years)
data
   year realReturnNext1Years realReturnNext2Years realReturnNext3Years inflationNext1Years inflationNext2Years inflationNext3Years
1 2000                  0.1                 0.15                 0.45                0.02                0.03                0.04
2 2001                  0.2                 0.25                   NA                0.03                0.05                0.06
3 2002                  0.3                   NA                   NA                0.07                0.08                0.09
因为我有很多专栏,所以我不能一次只做一个专栏。我试着用
ifelse()
来测试
mutate\u at
,但不确定如何测试年数是否一致

我有一个
realReturn
列名向量和另一个
inflation
列名向量。如果对应的realReturnColumn是
NA
,我试图将膨胀列更改为
NA
,但是如果realReturnColumn不是
NA
,我们可以使用
grep
收集“realReturnNext”列的索引,获取其
NA
的位置,并将“inflationNext”列中的相应位置替换为
NA

real_cols <- grep("^realReturnNext", colnames(data))
inflation_cols <- grep("^inflationNext", colnames(data))

data[inflation_cols][is.na(data[real_cols])] <- NA

#  year realReturnNext1Years realReturnNext2Years realReturnNext3Years
#1 2000                  0.1                 0.15                 0.45
#2 2001                  0.2                 0.25                   NA
#3 2002                  0.3                   NA                   NA

#  inflationNext1Years inflationNext2Years inflationNext3Years
#1                0.02                0.03                0.04
#2                0.03                0.05                  NA
#3                0.07                  NA                  NA
real\u cols
real_cols <- grep("^realReturnNext", colnames(data))
inflation_cols <- grep("^inflationNext", colnames(data))

data[inflation_cols][is.na(data[real_cols])] <- NA

#  year realReturnNext1Years realReturnNext2Years realReturnNext3Years
#1 2000                  0.1                 0.15                 0.45
#2 2001                  0.2                 0.25                   NA
#3 2002                  0.3                   NA                   NA

#  inflationNext1Years inflationNext2Years inflationNext3Years
#1                0.02                0.03                0.04
#2                0.03                0.05                  NA
#3                0.07                  NA                  NA