列出R中data.table的每一行的NA值列

Max*_*nis 2 r data.table

我想在data.table对象中添加一列,列出该行的NA列名.例如,假设我有以下data.table:

dt <- data.table(a = c(1, 2, 3, NA), 
                 b = c(1, 2, NA, NA), 
                 c = c(NA, 2, NA, 4))
    a  b  c        
1:  1  1 NA        
2:  2  2  2        
3:  3 NA NA        
4: NA NA  4
Run Code Online (Sandbox Code Playgroud)

我想添加一个包含这些值的列,产生以下data.table:

dt[, na.cols := c("c", "", "b,c", "a,b")]
    a  b  c na.cols        
1:  1  1 NA       c
2:  2  2  2        
3:  3 NA NA     b,c
4: NA NA  4     a,b
Run Code Online (Sandbox Code Playgroud)

如何动态添加此列?

mne*_*nel 5

这是一种避免使用applya data.table(内部强制转换为矩阵)的方法

dt[, na.cols := gsub('(^,+)|(,+$)','',do.call(paste, c(lapply(seq_along(.SD), function(x) ifelse(is.na(.SD[[x]]),names(.SD)[x],'')), sep=',')))]
#     a  b  c na.cols
# 1:  1  1 NA       c
# 2:  2  2  2        
# 3:  3 NA NA     b,c
# 4: NA NA  4     a,b
Run Code Online (Sandbox Code Playgroud)