根据dataframe行创建列

Gre*_*reg 4 r

我有一个数据框.我正在尝试创建一个虚拟变量,该变量最多为给定行的3列.

for(i in 1:nrow(data))
{
  data[i,]$max_metric <- max(data[i,]$a,
                             data[i,]$b,
                             data[i,]$c)
}
Run Code Online (Sandbox Code Playgroud)

这段代码有效,但绝对不是最好的方法.有没有其他方法可以做到这一点?

Jos*_*ich 5

使用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")])
Run Code Online (Sandbox Code Playgroud)

但是您可以将data.frame的每一列传递给pmaxvia,do.call因为第二个参数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)))
Run Code Online (Sandbox Code Playgroud)