【问题标题】:Finding parallel maxima between columns only when a key column is NA仅当键列为 NA 时才在列之间找到平行最大值
【发布时间】:2017-04-25 01:07:44
【问题描述】:

我几天前发布了this question,其中讨论了在相关列中存在 NA 的情况下如何找到平行最大值。然而,我意识到我问的问题并不完全正确。我真正想要完成的是能够找到一行的平行最大值,但前提是键列等于 NA。

这是相同的示例数据:

df1
ID Score1 Score2 Score3
1  2      3      1
2  5      1      2
3  1      6      8
4  9      10     NA

让 Score3 变量代表这个'key'列。即我要计算一个新的变量Score4,它表示只有Score3=NA时3个score变量中的最高分,否则(Score 3不等于NA时)取Score3的值。

应用一些函数FUN后我想看到的结果:

df2<-FUN(df1)
df2
ID Score1 Score2 Score3 Score4
1  2      3      1       1
2  5      1      2       2 
3  1      6      8       8
4  9      10     NA      10

谢谢!

【问题讨论】:

    标签: r max data-manipulation


    【解决方案1】:

    使用data.table

    df1 <- data.table(ID = c(1,2,3,4), Score1 = c(2,5,1,9), Score2 = c(3,1,6,10), Score3 = c(1,2,8,NA))
    
    df1[, Score4 := ifelse(is.na(Score3), max(Score1, Score2), Score3), by = 1:nrow(df1)]
    
    df1
    
       ID Score1 Score2 Score3 Score4
    1:  1      2      3      1      1
    2:  2      5      1      2      2
    3:  3      1      6      8      8
    4:  4      9     10     NA     10
    

    【讨论】:

    • 感谢您的代码。我以前没有使用过 data.table,当我尝试在我的实际数据上运行它时,我收到了这个错误:未使用的参数(by = 1:nrow(df))。我确定我犯了一个简单的错误,但我不确定在哪里。有什么建议吗?
    • 我不知道你为什么会得到那个。您是否尝试完全按照我写的方式运行?
    【解决方案2】:

    为了后代,这也是我想出的解决方案:

    df1<-df1%>%
    mutate(Score4_a=pmax(Score1,Score2,Score3,na.rm=T))%>%
    mutate(Score4_b=replace(Score3,is.na(Score3)==T,Score4_a))
    

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多