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

时间:2019-05-02 14:23:10

标签: r dataframe if-statement na

我有一个带有三个数字分数变量(新,中,旧)的数据框(df)。 我需要计算新旧之间(Diff1)以及新旧之间(Diff2)的差异分数。 如果中级得分为NA,则两个差异得分都必须为NA。 差异分数将被放入新变量

差异1很容易。 DIFF1 <-新–中 始终给出正确答案。

当(1)存在中分或中分为NA时,差异2可以正常工作。 而最新或最旧的分数也不适用。

当中间分数为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

1 个答案:

答案 0 :(得分:0)

我们可以将ifelse中的代码更改为

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

请注意,<-中的作业(ifelse)被替换(无效)为单个作业