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

时间:2015-09-30 10:31:27

标签: r if-statement max

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

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

我的预期输出是这样的:

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

value2列的第三行中,现在20代替25,因为这是同一行value2列的值。我有一个大型数据集,我很感激任何处理它的想法。

2 个答案:

答案 0 :(得分:3)

您还可以使用min

找到每行的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

答案 1 :(得分:2)

您可以使用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