找到R中3列中每行的最大值

时间:2014-09-19 13:28:09

标签: r max

我需要计算3列中每行的最大值。

表可以是:

x = c(1,2,3,4,5 ) 
y = c(2,3,3,1,1 ) 
z = c(4,3,2,1,1 ) 
df<-data.frame(x,y,z)

我需要得到:

    x   y   z   max
1   1   2   4   4
2   2   3   3   3
3   3   3   2   3
4   4   1   1   4
5   5   1   1   5

我试过了:

df$max<-max(x, y,z)

但我明白了:

  x y z max
1 1 2 4   5
2 2 3 3   5
3 3 3 2   5
4 4 1 1   5
5 5 1 1   5

那么,我该如何正确地做到这一点?

6 个答案:

答案 0 :(得分:6)

使用data.table:)

library(data.table)
x = c(1,2,3,4,5 ) 
y = c(2,3,3,1,1 ) 
z = c(4,3,2,1,1 ) 
dt<-data.table(x,y,z)
dt[, max:=pmax(x,y,z)]
dt

答案 1 :(得分:5)

您可以像这样使用apply功能:

df$max<-apply(X=df, MARGIN=1, FUN=max)

MARGIN=1参数表示,X中的每一行都希望在FUN中应用该函数。如果您使用MARGIN=2,它将按列或MARGIN = c(1,2),它将同时为行和列。

答案 2 :(得分:4)

尝试:

 df$max <- do.call(`pmax`, df)
 df
 #  x y z max
 #1 1 2 4   4
 #2 2 3 3   3
 #3 3 3 2   3
 #4 4 1 1   4
 #5 5 1 1   5

基准

 set.seed(49)
 df <- as.data.frame(matrix(sample(0:20, 1e5*3,replace=TRUE), ncol=3))
 f1 <- function() df$max <- apply(df, 1, max)
 f2 <- function() df$max <- do.call(`pmax`, df)
 f3 <- function() setDT(df)[, max:=pmax(V1,V2,V3)]

 library(microbenchmark)
 microbenchmark(f1(), f2(),f3(), unit="relative", times=25)
 #Unit: relative
 # expr       min        lq    median        uq      max neval
 # f1() 48.143635 48.287875 46.031638 32.868138 8.922203    25
 # f2()  1.269581  1.373479  1.654625  2.324896 1.182107    25
 # f3()  1.000000  1.000000  1.000000  1.000000 1.000000    25

答案 3 :(得分:1)

如果约翰的帖子接受他,但只是为了显示结果,他的评论确实有效

x = c(1,2,3,4,5 ) 
y = c(2,3,3,1,1 ) 
z = c(4,3,2,1,1 ) 
df<-data.frame(x,y,z)

df$max<-apply(df, 1, max)
df$max
#[1] 4 3 3 4 5


df
#x y z max
#1 2 4   4
#2 3 3   3
#3 3 2   3
#4 1 1   4
#5 1 1   5

答案 4 :(得分:0)

使用dplyr 1.0.0

df %>% rowwise() %>% 
  mutate(max = max(x, y, z))

答案 5 :(得分:-4)

您正在使用的编程语言是什么?

我会设置一个循环:

for i = 1 to 5 j[i] = max(x[i],y[i],z[i]) next