如何根据 R 数据框中的另一个变量创建具有 NA 或数字的数值变量

How to create a numeric variable with NA or a number depending on another variable in an R dataframe

我有一个包含三个数字分数变量(新、中、旧)的数据框 (df)。 我需要计算 New 和 Middle (Diff1) 之间以及 New 和 Old (Diff2) 之间的差异分数。 如果中间分数为 NA,则两个差异分数都需要为 NA。 差异分数将放入一个新变量

差异 1 很简单。 DIFF1 <- 新 – 中间 总是给出正确答案。

差异 2 在 (1) 存在中间分数或中间分数为 NA 时正确工作, 最新或最旧的分数也是 NA。

当中间分数为 NA 且存在最旧和最新分数时,差异 2 始终为数字。 我无法将差异 2 设为 NA。

我已经尝试了所有我能想到的变量命名排列(例如 df$New)和括号排列,但都没有成功。我也尝试过使用 == 和 = 而不是 <- 。我还验证了(使用 Rcmdr)我认为是 NA 的变量实际上是 NA。

输入数据

Old     Middle      New     
2483        NA      585     

代码

Ifelse (is.na(df[,"Middle"]),   
       (df[,"Diff2"] <- NA ),  
       (df[,"Diff2"] <- with(df,New - Old)))  

实际输出数据

Diff1(New – Middle) Diff2(New – Old)  
NA                  -1898  

所需的输出数据

Diff1(New – Middle) Diff2(New – Old)
NA                  NA

我们可以把ifelse中的代码改成

df$Diff2 <- with(df, ifelse(is.na(Middle), NA_real_, New - Old))

请注意,ifelse 中的赋值 (<-) 被替换(不起作用)为单个赋值