2017-08-03 12 views
1

我有這樣一個數據幀:替換信息內容如下行

tonelabel <- c("H*", "L-", "H*", "L-%", "(L+H*)", "(L*+!H)", "!H*", "H-", "L*", "H-%", "(H*)", "^H*", "H-", "H*", "H-%", "H*", "H-%", "L*", "H-%", "H*", "L-") 
boundary <- c("none", "low", "none", "low", "none", "none", "none", "high", "none", "high", "none", "none", "high", "none", "high", "none", "high", "none", "high", "none", "low") 
df <- data.frame(tonelabel, boundary) 
df 
    tonelabel boundary 
1   H*  none 
2   L-  low 
3   H*  none 
4  L-%  low 
5  (L+H*)  none 
6 (L*+!H)  none 
7  !H*  none 
8   H-  high 
9   L*  none 
10  H-%  high 
11  (H*)  none 
12  ^H*  none 
13  H-  high 
14  H*  none 
15  H-%  high 
16  H*  none 
17  H-%  high 
18  L*  none 
19  H-%  high 
20  H*  none 
21  L-  low 

在列DF $邊界的情況下,所謂的「無」必須被替換或者「低」或「高」 。 「低」還是「高」的決定必須基於以下「低」或「高」。所以如果接下來的「無」是「低」,那麼所有先前的「無」應該變成「低」。如果接下來的事情是「高」,那麼所有前面的「無」應該變成「高」。一直到下一個「低」或「高」,即。

這是我想的輸出是什麼樣子:

tonelabel boundary 
1   H*  low 
2   L-  low 
3   H*  low 
4  L-%  low 
5  (L+H*)  high 
6 (L*+!H)  high 
7  !H*  high 
8   H-  high 
9   L*  high 
10  H-%  high 
11  (H*)  high 
12  ^H*  high 
13  H-  high 
14  H*  high 
15  H-%  high 
16  H*  high 
17  H-%  high 
18  L*  high 
19  H-%  high 
20  H*  low 
21  L-  low 

我真的不能相信界定什麼「無」必須是任何解決方案與作爲因子水平是繼「無」 ,而不是在它之前。所以實際上,人們必須從下往上工作。任何想法將非常感謝!

回答

3

使用zoo包解決辦法,

df$boundary[df$boundary == 'none'] <- NA 

df$boundary <- zoo::na.locf(df$boundary, fromLast = TRUE) 

或通過tidyverse

library(tidyverse) 

df <- df %>% 
mutate(boundary = replace(boundary, boundary == 'none', NA)) %>% 
fill(boundary, .direction = 'up') 

兩個捐贈,

tonelabel boundary 
1   H*  low 
2   L-  low 
3   H*  low 
4  L-%  low 
5  (L+H*)  high 
6 (L*+!H)  high 
7  !H*  high 
8   H-  high 
9   L*  high 
10  H-%  high 
11  (H*)  high 
12  ^H*  high 
13  H-  high 
14  H*  high 
15  H-%  high 
16  H*  high 
17  H-%  high 
18  L*  high 
19  H-%  high 
20  H*  low 
21  L-  low 
+1

幹得漂亮。我正在使用'imputeTS'軟件包來解答一個問題,但'dplyr'解決方案更加優雅,我甚至不會打擾。 –

+0

@AndrewBrēza我從來沒有聽說過這個軟件包。也許我會參觀 – Sotos

+0

我推薦它。這個軟件包做一件事,但做得很好。 –