私は、特定のベースライン年(この場合は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))
Iは、(最後の列、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)
これは私が取得エラーです:
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
が、私はこの質問が戻っていくつかの時間を投稿された推測しています。また、コメントは、前の質問の更新を要求しました。 – akrun
@akrun右:http://stackoverflow.com/q/37494332/最初のコメントは、「これは新しい質問ではなく古い質問に対する編集やコメントでなければなりません」と述べています。これはこの質問の3番目の繰り返しかもしれません... – Frank