我有一个数据框。我正在尝试创建一个虚拟变量,该变量是给定行的最大 3 列。
for(i in 1:nrow(data))
{
data[i,]$max_metric <- max(data[i,]$a,
data[i,]$b,
data[i,]$c)
}
此代码有效,但绝对不是最好的方法。还有其他方法可以做到这一点吗?
我有一个数据框。我正在尝试创建一个虚拟变量,该变量是给定行的最大 3 列。
for(i in 1:nrow(data))
{
data[i,]$max_metric <- max(data[i,]$a,
data[i,]$b,
data[i,]$c)
}
此代码有效,但绝对不是最好的方法。还有其他方法可以做到这一点吗?
Use pmax
,它采用传递给它的所有参数的元素最大值。但是,这意味着您不能只传递整个 data.frame。
# this won't work because data[,c("a","b","c")] is one argument
data$max_metric <- pmax(data[,c("a","b","c")])
但是您可以将 data.frame 的每一列传递给pmax
via,do.call
因为 to 的第二个参数do.call
应该是一个列表,而 data.frames 是列表(带有一些属性)。
data$max_metric <- do.call(pmax, data[,c("a","b","c")])
# if you want na.rm=TRUE
data$max_metric <- do.call(pmax, c(data[,c("a","b","c")],list(na.rm=TRUE)))