2017-08-03 60 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

我推荐它。这个软件包做一件事,但做得很好。 –