基于上一个值和下一个值拆分并枚举R中的序列元素
这个问题让我发疯。假设我有一个布尔向量中的序列:基于上一个值和下一个值拆分并枚举R中的序列元素,r,dplyr,R,Dplyr,这个问题让我发疯。假设我有一个布尔向量中的序列: switch <- c(TRUE, TRUE, FALSE, TRUE, rep(FALSE, 6), TRUE, rep(FALSE, 7), TRUE, TRUE, TRUE, FALSE, TRUE) 虽然一开始这看起来很琐碎,但我无法找到一种有效的方法在R中实现它。您所需的输出与您提供的数据不匹配,因此我不完全确定您想要什么,但这里是一种尝试 # construct data dat <- data.frame(switch
switch <- c(TRUE, TRUE, FALSE, TRUE, rep(FALSE, 6), TRUE, rep(FALSE, 7), TRUE, TRUE, TRUE, FALSE, TRUE)
虽然一开始这看起来很琐碎,但我无法找到一种有效的方法在R中实现它。您所需的输出与您提供的数据不匹配,因此我不完全确定您想要什么,但这里是一种尝试
# construct data
dat <- data.frame(switch=switch, set=NA_integer_)
# get the groupings
dat$set[switch] <- cumsum(c(1, diff(which(switch)) > 5))
您想要的输出与您提供的数据不匹配,因此我不完全确定您想要什么,但这里有一个尝试
# construct data
dat <- data.frame(switch=switch, set=NA_integer_)
# get the groupings
dat$set[switch] <- cumsum(c(1, diff(which(switch)) > 5))
这里有一个选项带有
rle
(NA^!switch) * with(rle(switch), rep(cumsum(lengths > 5 & !values), lengths) + 1)
#[1] 1 1 NA 1 NA NA NA NA NA NA 2 NA NA NA NA NA NA NA 3 NA NA NA NA NA NA 4 4 NA 4
数据
开关这里有一个带有rle的选项
(NA^!switch) * with(rle(switch), rep(cumsum(lengths > 5 & !values), lengths) + 1)
#[1] 1 1 NA 1 NA NA NA NA NA NA 2 NA NA NA NA NA NA NA 3 NA NA NA NA NA NA 4 4 NA 4
数据
一定要切换。一句台词是一个非常传统的说法。当然。一句话是一个非常传统的说法。
switch <- c(TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE,
TRUE)