首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为R中的3列中的每一行求出最大值

为R中的3列中的每一行求出最大值
EN

Stack Overflow用户
提问于 2014-09-19 13:28:08
回答 5查看 20.5K关注 0票数 8

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

一张桌子可以是:

代码语言:javascript
复制
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)

我要得到:

代码语言:javascript
复制
    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

我试过:

代码语言:javascript
复制
df$max<-max(x, y,z)

但我明白:

代码语言:javascript
复制
  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

那么,我如何才能正确地做到这一点呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-19 14:38:09

可以为此使用apply函数,如下所示:

代码语言:javascript
复制
df$max<-apply(X=df, MARGIN=1, FUN=max)

MARGIN=1参数表明,对于X中的每一行,您都希望在FUN中应用该函数。如果您使用MARGIN=2,它将是by列或MARGIN=c(1,2),它将是行和列。

票数 10
EN

Stack Overflow用户

发布于 2014-09-19 14:20:07

使用data.table :)

代码语言:javascript
复制
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
票数 11
EN

Stack Overflow用户

发布于 2014-09-19 13:53:56

尝试:

代码语言:javascript
复制
 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

基准测试

代码语言:javascript
复制
 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
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25935134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档