2012-05-01 167 views
4

我有一个数据框。我试图创建一个虚拟变量,它是给定行的最多3列。基于数据帧的行创建列

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

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

回答

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")]) 

但是你可以通过do.call通过data.frame到pmax的每一列,因为第二个参数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))) 
相关问题