[英]data.table shift right all cell values by number of na within each row [R]
[英]List columns with NA values for each row of a data.table in R
我想在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
我想用這些值添加一列,得到以下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
如何動態添加此列?
這是一種避免在data.table
上使用apply
( 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
您可以這樣進行:
dt[, na.cols :=
apply(dt, 1, function(row) paste(names(row)[which(is.na(row))],
collapse=","))]
詳細信息:基本上,您將沿邊margin 1
(即沿行)使用Apply,然后針對每一行將NA
列名粘貼在一起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.