【发布时间】:2018-06-27 14:53:14
【问题描述】:
这似乎应该是微不足道的,但我很难过。
以下是问题的简单说明;真正的问题是 > 1M 行,> 100 列。出于性能原因,我使用 data.table,但我愿意接受其他建议。
“期望”列应该等于 x、y 和 z 列中的第一个非 NA 值(按顺序)。
x <- c(NA,NA,"a")
y <- c(NA,"b","c")
z <- c("d","e","f")
desired <- c("d","b","a")
dt <- data.table(x,y,z,desired)
查找列索引就可以了:
dt[,desired.col.ind := apply(dt,1,function(x) which(!is.na(x))[1]),]
从索引中返回列名就可以了:
dt[,desired.col.name := names(dt)[desired.col.ind],]
但是我所有将列索引或名称转换为其值的尝试都失败了,下面是我所做的两个更清晰的尝试。
dt[,desired.val.1 := get(desired.col.name),] # fail (returns value from column 'z' for all)
dt[,desired.val.2 := apply(desired.col.name,1,function(x) get(x)),] # error
【问题讨论】:
标签: r data.table