R:当属性不等于拥有时,如何找到变量的最小值?

时间:2013-09-25 18:03:05

标签: r

我一直在尝试用条件计算变量的最小值。我有以下数据:

Data
Date       Net Price 
2013-12-01  A   39  
2013-12-01  B   23  
2013-12-01  C   25  
2013-12-08  A   52  
2013-12-08  B   12  
2013-12-08  C   19  
2013-12-15  A   32  
2013-12-15  B   36  
2013-12-15  C   40  

我想在A上添加一个最小价格列,即Min(B,C)和B,即Min(A,B)等等,以便日期。

Date       Net Price Min 
2013-12-01  A   39  23
2013-12-01  B   23  25
2013-12-01  C   25  23
2013-12-08  A   52  12
2013-12-08  B   12  19
2013-12-08  C   19  12
2013-12-15  A   32  36
2013-12-15  B   36  32
2013-12-15  C   40  32

有人可以帮我找到网络不等于拥有日期的最低要求。

由于

2 个答案:

答案 0 :(得分:2)

您也可以使用:

f <- function(x){m <- min(x); ifelse(x==m, min(x[x>m]), m)}
within(Data, Min <- ave(Price, Date, FUN=f))

结果:

        Date Net Price Min
1 2013-12-01   A    39  23
2 2013-12-01   B    23  25
3 2013-12-01   C    25  23
4 2013-12-08   A    52  12
5 2013-12-08   B    12  19
6 2013-12-08   C    19  12
7 2013-12-15   A    32  36
8 2013-12-15   B    36  32
9 2013-12-15   C    40  32

答案 1 :(得分:1)

我不会说这是最优雅的解决方案,但它确实有效。

data <- read.table(text='Date       Net Price 
2013-12-01  A   39  
2013-12-01  B   23  
2013-12-01  C   25  
2013-12-08  A   52  
2013-12-08  B   12  
2013-12-08  C   19  
2013-12-15  A   32  
2013-12-15  B   36  
2013-12-15  C   40  ',header=TRUE)

sp <- split(data,data$Date)
mindrop1 <- function(j) sapply(1:nrow(j),function(i) min(j$Price[-i]))
data$Min <- unlist(lapply(sp, mindrop1))

> data
        Date Net Price Min
1 2013-12-01   A    39  23
2 2013-12-01   B    23  25
3 2013-12-01   C    25  23
4 2013-12-08   A    52  12
5 2013-12-08   B    12  19
6 2013-12-08   C    19  12
7 2013-12-15   A    32  36
8 2013-12-15   B    36  32
9 2013-12-15   C    40  32