R 根据另一列确定一列中的最大值

R 根据另一列确定一列中的最大值,r,if-statement,max,R,If Statement,Max,我想根据列value2中的值来确定列value1中的最大值: df <- 'inf value1 value2 xx1 20 30 xx2 15 40 xx3 25 20' df <- read.table(text=df, header=T) df您可以使用ifelse df <- 'inf value1 value2 xx1 20 30 xx2 15 4

我想根据列
value2
中的值来确定列
value1
中的最大值:

df <- 'inf value1 value2
       xx1   20    30
       xx2   15    40
       xx3   25    20'
df <- read.table(text=df, header=T)

df您可以使用
ifelse

df <- 'inf value1 value2
       xx1   20    30
       xx2   15    40
       xx3   25    20'
df <- read.table(text=df, header=T)
df$value1 <- ifelse(df$value2<df$value1,df$value2,df$value1)
df
#   inf value1 value2
# 1 xx1     20     30
# 2 xx2     15     40
# 3 xx3     20     20

df您可以使用
ifelse

df <- 'inf value1 value2
       xx1   20    30
       xx2   15    40
       xx3   25    20'
df <- read.table(text=df, header=T)
df$value1 <- ifelse(df$value2<df$value1,df$value2,df$value1)
df
#   inf value1 value2
# 1 xx1     20     30
# 2 xx2     15     40
# 3 xx3     20     20

df您还可以使用
pmin

with(df, pmin(value1, value2))
## [1] 20 15 20

一些基准

set.seed(123)
test1 <- sample(1e3, 1e8, replace = TRUE)
test2 <- sample(1e3, 1e8, replace = TRUE)

### My solution
system.time(res1 <- pmin(test1, test2)) 
# user  system elapsed 
# 2.87    0.11    3.00 

### @Avinash
system.time(res2 <- ifelse(test1 < test2, test1, test2))
# user  system elapsed 
# 16.33    2.41   18.87 

### Contributed by @Colonel
system.time({temp <- test1 > test2 ; test1[temp] <- test2[temp]}) 
# user  system elapsed 
# 2.34    0.29    2.63 

identical(res1, res2)
# [1] TRUE
identical(res1, test1)
# [1] TRUE
set.seed(123)

test1您还可以使用
pmin

with(df, pmin(value1, value2))
## [1] 20 15 20

一些基准

set.seed(123)
test1 <- sample(1e3, 1e8, replace = TRUE)
test2 <- sample(1e3, 1e8, replace = TRUE)

### My solution
system.time(res1 <- pmin(test1, test2)) 
# user  system elapsed 
# 2.87    0.11    3.00 

### @Avinash
system.time(res2 <- ifelse(test1 < test2, test1, test2))
# user  system elapsed 
# 16.33    2.41   18.87 

### Contributed by @Colonel
system.time({temp <- test1 > test2 ; test1[temp] <- test2[temp]}) 
# user  system elapsed 
# 2.34    0.29    2.63 

identical(res1, res2)
# [1] TRUE
identical(res1, test1)
# [1] TRUE
set.seed(123)

测试1你能详细说明如何从输入到输出吗?你想在value2中按组进行吗?你能详细说明如何从输入到输出吗?你想在value2中按组进行吗?我的评论不完整:我想添加
df[df$value1>df$value2,'value1']df$value2,“value2']
应该与pmin相同或更少的时间。@ColonelBeauvel这是一个很好的问题,可能值得发布。我不想为这样一个简单的问题增加主题,如果你愿意,你可以将它添加到你的文章和基准中。@ColonelBeauvel好,添加了一个带有条件预分配的基准测试,结果显示速度更快(有点)我们在某处有到上校词典的链接吗?我的评论不完整:我想添加
df[df$value1>df$value2,'value1']df$value2,“value2']
应该与pmin相同或更少的时间。@ColonelBeauvel这是一个很好的问题,可能值得发布。我不想为这样一个简单的问题增加主题,如果你愿意,你可以将它添加到你的文章和基准中。@ColonelBeauvel好,添加了一个带有条件预分配的基准测试,结果证明它更快(有点)了。我们在某处有到上校词典的链接吗?