我一直在尝试用条件计算变量的最小值。我有以下数据:
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
有人可以帮我找到网络不等于拥有日期的最低要求。
由于
答案 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