2
比方說,我有一個數據幀如下:動態創建
BID diff
1 1 NA
2 1 0.0
3 1 0.0
4 1 -0.5
5 1 0.0
6 1 0.0
7 1 0.0
8 1 0.5
9 1 0.0
10 1 0.0
11 2 NA
12 2 0.0
13 2 0.0
14 2 0.0
15 2 -0.5
16 2 0.0
17 2 0.0
18 2 0.0
19 2 0.0
20 3 NA
21 3 0.5
22 3 0.0
23 3 -0.5
24 3 0.5
我想要做的是,爲每個BID
,創建一個新的變量neg
等於在負值diff
之前爲0,在負值diff
之後等於1。但是當diff
再次改變時它應該停止。例如。
BID diff neg
1 1 NA 0
2 1 0.0 0
3 1 0.0 0
4 1 -0.5 NA
5 1 0.0 1
6 1 0.0 1
7 1 0.0 1
8 1 0.5 NA
9 1 0.0 NA
10 1 0.0 NA
11 2 NA 0
12 2 0.0 0
13 2 0.0 0
14 2 0.0 0
15 2 -0.5 NA
16 2 0.0 1
17 2 0.0 1
18 2 0.0 1
19 2 0.0 1
20 3 NA NA
21 3 0.5 NA
22 3 0.0 0
23 3 -0.5 NA
24 3 0.5 NA
我試圖接近跑着「1個與dplyr
如下:
data <- data %>%
group_by(BID) %>%
mutate(neg =
as.numeric(
ifelse(lag(diff) == -0.5, 1,
ifelse(((lag(neg) == 1) & (diff == 0.0)),
lag(neg), 0))))
我想它現在是有點明顯,如果這僅適用於需要兩個或更少1的按照diff
-0.5。
任何幫助將不勝感激,除了dplyr
之外,我也接受其他方法。數據本身是一個時間序列,diff
是每個BID的另一個變量的當前值和滯後值之差。如果有其他信息可能會有所幫助,請告知我們。
我不認爲這是所需的輸出。這裏也應該有'NAs'。 –
感謝您的建議,它比我所得到的更接近。不幸的是大衛是正確的,因爲它不是理想的輸出。最重要的是,因爲它忽略了團體。例如,'df $ neg [20]'當然不應該是1.我試圖用data.table來解決一個功能性的解決方案,但它肯定是效率低下的。 – James