【问题标题】:Getting the position of the the last non-NA value in a row in an R data.table获取 R data.table 中一行中最后一个非 NA 值的位置
【发布时间】:2020-05-14 05:35:38
【问题描述】:

假设我有以下 data.table,有四个学生和他们对四个问题的回答:

library(data.table)
dt <- data.table(
  student = 1:4,
  q1 = c(1, 1, 1, NA),
  q2 = c(2, 2, NA, NA),
  q3 = c(3, NA, 3, NA),
  q4 = c(4, NA, NA, NA)
)
# dt
#    student q1 q2 q3 q4
# 1:       1  1  2  3  4
# 2:       2  1  2 NA NA
# 3:       3  1 NA  3 NA
# 4:       4 NA NA NA NA

在每一行(但在问题列q1q4)中从右侧获取第一个非 NA 值的优雅 r data.table 方法是什么? last_q_answered下面的栏目?

#    student q1 q2 q3 q4 last_q_answered
# 1:       1  1  2  3  4               4
# 2:       2  1  2 NA NA               2
# 3:       3  1 NA  3 NA               3
# 4:       4 NA NA NA NA               0

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我们可以使用max.col

    max.col(!is.na(dt[, -1]), ties.method = 'last') * +(rowSums(!is.na(dt[,-1])) > 0)
    #[1] 4 2 3 0
    

    【讨论】:

    • 这个答案包含有用的代码,我可以在其他地方应用。谢谢你,罗纳克!
    【解决方案2】:

    我们可以使用melton '学生'

    library(data.table)
    dt[melt(dt, id.var = 'student', na.rm = TRUE)[, 
         value[.N], .(student)], last_q_answered := V1, on = .(student)][]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 2016-01-21
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2016-11-12
      相关资源
      最近更新 更多