我有一个dataframe (df),它有三个数字分数变量(New、numeric、Old)。我需要计算新与中(Diff1)和新与旧(Diff2)之间的差异分数。如果中间得分是NA,则两者的差值都必须是NA。差异分数将被放入一个新的变量中。
差异1很容易。DIFF1 <- New总是给出正确的答案。
差异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发布于 2019-05-02 14:24:36
我们可以将ifelse中的代码更改为
df$Diff2 <- with(df, ifelse(is.na(Middle), NA_real_, New - Old))请注意,将ifelse中的赋值(ifelse)替换为单个赋值(不起作用)
https://stackoverflow.com/questions/55954535
复制相似问题