date A B C
11/24/2016 0 -1 -1
11/23/2016 -1 -1 -1
11/22/2016 0 -1 -1
11/21/2016 0 -1 -1
11/18/2016 -1 -1 -1
11/17/2016 -1 -1 -1
11/16/2016 -1 -1 -1
11/15/2016 -1 -1 -1
11/14/2016 -1 -1 -1
11/11/2016 -1 -1 -1
11/10/2016 0 -1 0
11/9/2016 0 -1 0
C
的excel命令(假設數據從第2行開始)爲=IF(A2=-1, -1, IF(AND(B2=-1,C3=-1),-1,0))
。所以基本上,如果列A是-1,那麼列C也將是-1。否則,我們將檢查是否B2=-1
以及C下面的行是否爲-1
。在Excel中,我可以通過簡單地複製/粘貼公式來完成此操作,並且C列會自動更新。我不認爲這是相當的R.R - 從Excel複製IF()邏輯命令到R
在R作爲簡單的,我有一個山坳A
和B
價值觀,我想用這些列創建C
像我如何通過Excel中一樣。然而,我一直在想如何做到這一點已經有一段時間了。這是因爲'C'依賴於'A',如果失敗則取決於'B'和它自身的滯後值。幫助將非常感謝!
編輯:我有一些想法,可能工作。
for (i in 1:length(dat[,1])){
dat[i,3] <- ifelse(dat[i,1]==-1, -1, 0)
}
運行第一循環之後,我得到:
A B V3
1 0 -1 0
2 -1 -1 -1
3 0 -1 0
4 0 -1 0
5 -1 -1 -1
6 -1 -1 -1
7 -1 -1 -1
8 -1 -1 -1
9 -1 -1 -1
10 -1 -1 -1
11 0 -1 0
12 0 -1 0
現在的第二個條件:
for (i in 2:length(dat[,1])){
dat[i-1,3] <- ifelse(dat[i-1,2]==-1&dat[i,3]==-1, -1, dat[i,3])
}
對於第二個條件,我希望的是,for()
將檢查在它之前的行並且迭代地填充-1
s,只要在C中的當前行之前存在-1
行,並且-1
一個當前行中B.然而,在這結束返回:
A B V3
1 0 -1 -1
2 -1 -1 0
3 0 -1 0
4 0 -1 -1
5 -1 -1 -1
6 -1 -1 -1
7 -1 -1 -1
8 -1 -1 -1
9 -1 -1 -1
10 -1 -1 0
11 0 -1 0
12 0 -1 0
我需要row2
留爲-1,這樣row3
可以得到填補爲-1。
所以你已經有'C'列的值了嗎? –
@Ronak Shah對不起!應該澄清。我在R中有'A'和'B'的值,我想用這些來創建'C',就像我在Excel中做的一樣。將編輯我的文章! – Nikitau
'dplyr :: case_when'可以很好地處理:'library(dplyr); df%>%mutate(C = case_when(A == -1〜-1,B == -1&lead(C)== -1〜-1,TRUE〜0))'否則可以使用嵌套'ifelse '電話,但那會變得混亂。 – alistaire