【发布时间】:2016-10-07 01:33:18
【问题描述】:
我有一个缺少值的 data.table,其中某些行仅包含 NA。 data.table 实际上是较大 data.table 的列的子集,所以我想避免删除所有 NA 行。我想找到一种优雅的方法来找到每行中具有最小元素的列的索引,并将结果数组作为新列添加到data.table。对于所有 NA 行,我想要一个 NA 结果。这是一种不优雅的方法:
> dt <- data.table(x=c(1,NA,3),y=c(2,NA,NA),z=c(3,NA,1))
> dt
x y z
1: 1 2 3
2: NA NA NA
3: 3 NA 1
> w <- apply(dt,1,which.min)
> w
[[1]]
x
1
[[2]]
integer(0)
[[3]]
z
3
> v <- unlist(lapply(w,function(z) ifelse(length(z)==0, NA, z[1])))
> v
[1] 1 NA 3
> dt$idx <- v
> dt
x y z idx
1: 1 2 3 1
2: NA NA NA NA
3: 3 NA 1 3
如您所见,不优雅的主要原因是apply 创建了一个列表而不是一个数组。发生这种情况是因为每行的结果长度不同。另外,我正在调用 base-R 函数 which.min、apply、unlist 和 lapply。 有没有一种简洁的data.table 方式来获得想要的结果?
【问题讨论】:
标签: r data.table