【发布时间】:2018-03-29 20:02:54
【问题描述】:
测试数据帧:
a<-data.frame(True_False = c(T,F,F,F,F,T,F,T,T,T,F,F,F,F,F,F,F,F))
True_False
1 TRUE
2 FALSE
3 FALSE
4 FALSE
5 FALSE
6 TRUE
7 FALSE
8 TRUE
9 TRUE
10 TRUE
11 FALSE
12 FALSE
13 FALSE
14 FALSE
15 FALSE
16 FALSE
17 FALSE
18 FALSE
使用它,我想编辑此列或创建一个新的列,该列至少每三行一次具有 True。这意味着我需要检查当前行,如果为假,如果前两行为假,则将其设为真。否则保持原样。使用 Zoo、Dplyr 和 Rollapply,我接近了。
library(zoo)
library(tidyverse)
b<-a%>%
mutate(Roll = ifelse(rollapplyr(Input,3,sum, partial = T) == 0,T,Input))
b$Desired<-c(T,F,F,T,F,T,F,T,T,T,F,F,T,F,F,T,F,F)
Input Roll Desired
1 TRUE TRUE TRUE
2 FALSE FALSE FALSE
3 FALSE FALSE FALSE
4 FALSE TRUE TRUE
5 FALSE TRUE FALSE
6 TRUE TRUE TRUE
7 FALSE FALSE FALSE
8 TRUE TRUE TRUE
9 TRUE TRUE TRUE
10 TRUE TRUE TRUE
11 FALSE FALSE FALSE
12 FALSE FALSE FALSE
13 FALSE TRUE TRUE
14 FALSE TRUE FALSE
15 FALSE TRUE FALSE
16 FALSE TRUE TRUE
17 FALSE TRUE FALSE
18 FALSE TRUE FALSE
基本上我的问题是它将总和应用于整个列,然后在之后添加 Trues。因此,我们有不必要的 True。那么有没有一种方法可以在进入下一行之前应用 True 呢?我假设我需要使用某种类型的应用程序,但这是我不熟悉的领域,即使阅读文档我也不确定如何直接执行此操作。
【问题讨论】: