【发布时间】:2016-09-26 17:36:34
【问题描述】:
我有特定基准年份的价格(在本例中为 1993 年),以及所有年份的乘数。使用这些已知的乘法因子,我想计算基准年之后和之前所有年份的(项目)价格。
这是输入数据:
Year City MultiplicationFactor Price_BaselineYear
1990 New York NA NA
1991 New York 0.9 NA
1992 New York 2.0 NA
1993 New York 0.8 100
1994 New York 0.6 NA
1995 New York 0.8 NA
1996 New York 2.0 NA
1990 Boston NA NA
1991 Boston 1.6 NA
1992 Boston 1.25 NA
1993 Boston 0.5 200
1994 Boston 1.75 NA
1995 Boston 2.5 NA
1996 Boston 0.5 NA
构造输入数据的代码:
myData<-structure(list(Year = c(1990L, 1991L, 1992L, 1993L, 1994L, 1995L,1996L, 1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L), City = structure(c(2L,2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Boston","New York"), class = "factor"), MultiplicationFactor = c(NA,0.9, 2, 0.8, 0.6, 0.8, 2, NA, 1.6, 1.25, 0.5, 1.75, 2.5, 0.5),`Price(BaselineYear)` = c(NA, NA, NA, 100L, NA, NA, NA, NA,NA, NA, 200L, NA, NA, NA)), .Names = c("Year", "City", "MultiplicationFactor","Price_BaselineYear"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -14L))
我想要的输出(最后一列,Price_AllYears):
Year City MultiplicationFactor Price_BaselineYear Price_AllYears
1990 New York NA NA 69.4
1991 New York 0.9 NA 62.5
1992 New York 2.0 NA 125.0
1993 New York 0.8 100 100.0
1994 New York 0.6 NA 60.0
1995 New York 0.8 NA 48.0
1996 New York 2.0 NA 96.0
1990 Boston NA NA 200.0
1991 Boston 1.6 NA 320.0
1992 Boston 1.25 NA 400.0
1993 Boston 0.5 200 200.0
1994 Boston 1.75 NA 350.0
1995 Boston 2.5 NA 875.0
1996 Boston 0.5 NA 437.5
感谢@alistaire:
myData %>%
group_by(City) %>%
arrange(Year) %>%
mutate(Price_AllYears = ifelse(Year < Year[which(!is.na(Price_BaselineYear))],
lead(Price_AllYears) / lead(MultiplicationFactor),
ifelse(Year > Year[which(!is.na(Price_BaselineYear))],
lag(Price_AllYears) * MultiplicationFactor,
Price_BaselineYear)))%>%
ungroup() %>%
arrange(City)
这是我得到的错误:
错误:找不到对象“Price_AllYears”
如果我必须使用 Excel,我会使用以下方法:
A B C D E
1 Year City MultiplicationFactor Price_BaselineYear Price_AllYears
2 1990 New York NA NA E3/C3
3 1991 New York 0.9 NA E4/C4
4 1992 New York 2.0 NA E5/C5
5 1993 New York 0.8 100 D5
6 1994 New York 0.6 NA E5*C6
7 1995 New York 0.8 NA E6*C7
8 1996 New York 2.0 NA E7*C8
9 1990 Boston NA NA E10/C10
10 1991 Boston 1.6 NA E11/C11
11 1992 Boston 1.25 NA E12/C12
12 1993 Boston 0.5 200 D12
13 1994 Boston 1.75 NA E12*C13
14 1995 Boston 2.5 NA E13*C14
15 1996 Boston 0.5 NA E14*C15
【问题讨论】:
-
我猜这个问题是几个小时前发布的。此外,cmets 要求更新之前的问题。
-
@akrun 对:stackoverflow.com/q/37494332 即使在那里,第一条评论说“这应该是对您的旧问题的编辑或评论,而不是新问题。”所以这可能是这个问题的第三次迭代......
标签: r loops recursion matrix dataframe