我想在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)
如何动态添加此列?
这是一种避免使用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)
| 归档时间: |
|
| 查看次数: |
713 次 |
| 最近记录: |