3

条件付きの変数の最小値を計算しようとしています。次のデータがあります。

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  

Min(B,C) である A と Min(A,B) である 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

ネットワークが自分と等しくない日付までに最小値を見つけるのを手伝ってくれませんか。

ありがとう

4

2 に答える 2

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
于 2013-09-25T18:46:56.667 に答える
1

I wouldn't say this is the most elegant solution, but it works.

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
于 2013-09-25T18:41:13.997 に答える