我有一个数据集,其中包含多个标记为1或NA的案例,我正在尝试找出一种方法来返回每行中不是NA的最后一列(编号最高的标记)的名称。
以下是一些示例数据:
PIN <- c("case1", "case2", "case3", "case4", "case5")
STAMP_1 <- c(1, 1, 1, 1, 1)
STAMP_2 <- c(NA, 1, 1, NA, 1)
STAMP_3 <- c(1, NA, 1, 1, NA)
STAMP_4 <- c(NA, NA, 1, 1, NA)
STAMP_5 <- c(1, NA, NA, 1, NA)
data <- data.frame(PIN, STAMP_1, STAMP_2, STAMP_3, STAMP_4, STAMP_5)
我想找出一种方法来返回一个将有列的数据框:“情况1”、“情况2”、“情况3”、“情况4”、“情况5”和“印章_5”、“印章_2”、“印章_4”、“印章_5”、“印章_2”。
3条答案
按热度按时间vfhzx4xs1#
下面是一个使用
max.col
,is.na
和names
的方法。max.col
查找每一行中具有最大值的列。这里,我们将is.na
的值(TRUE或FALSE)提供给它,并使用ties。method=“last”获取最终的非NA值。该位置用于索引names(dat)
。如果整行都有NA,
max.col
将返回该行的最终位置(是否为静默失败?)。返回NA而不是该位置的一种方法是使用NA和取幂的技巧。在这里,我们对所有行执行apply
,并找到任何包含any
行的NA行,如果这些行至少有一个非NA值,则返回FALSE(或0)。在Frank的建议下,我从
applyapply(dat[-1], 1, function(x) all(is.na(x)))
切换到了!rowSums(!is.na(dat[-1]))
。这应该比apply
快很多。xam8gpfp2#
通过将
dplyr
与melt
一起使用(从reshape
)mf98qq943#
碱基R