这里是一个非常基础的编程问题,但为了将来的发展,我想知道处理这种常见情况的最佳方式。我有三列变化在0到10之间的不同级别,并希望确定它们中哪一列具有最高的值,并显示该列的名称(在突变的列或另外创建的“最大”列中)。如果存在任何平局,我更喜欢选择c列而不是b或a列,因为此开关将用于从其他列中提取值,这些值可能与这些等效。
下面的代码可以完成任务,但是否有更短、更简单的方法呢?
set.seed(7)
mat <- matrix(as.integer(runif(15, 0, 10)), nrow = 5, ncol = 3)
colnames(mat) <- letters[1:3]
(mat)
matBestOf <-
data.frame(mat) %>%
mutate(Largest = ifelse(c >= b & c >= a, "c",
ifelse(b >= c & b >= a, "b",
"a"))
)
matBestOf
# a b c Largest
# 1 9 7 1 a
# 2 3 3 2 b
# 3 1 9 7 b
# 4 0 1 0 b
# 5 2 4 4 c
我尝试使用max()
函数,但它只返回最高的值而不是具有最高值的列名。此外,显然我没有比较所有三列的值,因为结果仅来自a和c中的最佳值,从未来自b。另外,似乎我不能偏爱更高的字母,这没问题,也许我可以没有这个额外的功能。
matBestOf <-
data.frame(mat) %>%
rowwise %>%
mutate(Largest = max(a:c))
matBestOf
# Source: local data frame [5 x 4]
# Groups: <by row>
#
# a b c Largest
# (int) (int) (int) (int)
# 1 9 7 1 9
# 2 3 3 2 3
# 3 1 9 7 7
# 4 0 1 0 0
# 5 2 4 4 4