获取R data.table中行中最后一个非NA值的位置
假设我有下面的data.table,有四个学生和他们对四个问题的答案:获取R data.table中行中最后一个非NA值的位置,r,data.table,R,Data.table,假设我有下面的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:
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
我们可以使用
max.col
:
max.col(!is.na(dt[, -1]), ties.method = 'last') * +(rowSums(!is.na(dt[,-1])) > 0)
#[1] 4 2 3 0
我们可以将
melt
与“学生”上的join一起使用
library(data.table)
dt[melt(dt, id.var = 'student', na.rm = TRUE)[,
value[.N], .(student)], last_q_answered := V1, on = .(student)][]
这个答案包含有用的代码,我可以在其他地方应用。谢谢你,罗纳克!
library(data.table)
dt[melt(dt, id.var = 'student', na.rm = TRUE)[,
value[.N], .(student)], last_q_answered := V1, on = .(student)][]