如何根据 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
中的赋值 (<-
) 被替换(不起作用)为单个赋值
我有一个包含三个数字分数变量(新、中、旧)的数据框 (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
中的赋值 (<-
) 被替换(不起作用)为单个赋值