【发布时间】:2020-12-29 12:50:51
【问题描述】:
不确定我做错了什么,但我正在努力获取不是 NA 的最后一列(在几列中)的每行索引。
使用 tidyverse 和cross,我得到的输出列与输入列一样多,我希望一个输出列具有相应列的索引。
dat <- data.frame(id = c(1, 2, 3),
x = c(1, NA, NA),
y = c(NA, NA, NA),
z = c(3, 1, NA))
我尝试了以下方法(其中受此启发:Return last data frame column which is not NA):
dat %>%
mutate(last = across(-id, ~max.col(!is.na(.x), ties.method="last")))
预期结果是:
id x y z last
1 1 1 NA 3 3
2 2 NA NA 1 3
3 3 NA NA NA NA
【问题讨论】:
-
max.col需要一个matrix(参考:?max.col),而.x是一个向量,所以第一个有效调用是max.col(c(1,1,NA))(它返回一个长度为 3 的向量,c(1,1,NA). -
我明白了,但是将 .x 更改为 .将导致获得几个新列。
-
或许你应该考虑
dat %>% cbind(last=max.col(!is.na(.[-1]), ties.method = "last")) -
第二,你的第三行
NA与max*不一致:即使!is.na(.x)对这三个都是假的,三个假的最大值(类似于max(c(0,0,0)))仍然有效,因此它仍然会返回 3。听起来您需要特殊的逻辑,可能是自定义函数。 -
您几乎肯定不想使用
.而不是.x