假设我有一个带有距离变量的排序数据框,该变量d
指示变量中的度量之间的距离a
。
library(dplyr)
set.seed(1)
df <-
data.frame(a=sort(sample(2:20,8))) %>%
mutate(d = a-lag(a))
这给出:
> df
a d
1 5 NA
2 7 2
3 8 1
4 9 1
5 11 2
6 14 3
7 15 1
8 16 1
我正在尝试添加一种关闭计数器/分组变量g
,该变量指示是否d
大于 2。g
可以采用以下值:g1、g2、...等。换句话说,我想g
在d
> 2时“增加” . 在下面的数据中我们会得到:
>df a d g
1 5 NA g1
2 7 2 g1
3 8 1 g1
4 9 1 g1
5 11 2 g1
6 14 3 g2
7 15 1 g2
8 16 1 g2
我虽然使用了一个具有全局副作用的函数(是的,这通常是一个坏主意,我想不出其他任何东西):
f <- function(x){
if(x)
g <<- g +1
return(paste0('g', g))
}
然后做:
g=0
df %>%
mutate(g = ifelse(is.na(d)|d>2, f(T), f(F)))
但g
不会增加变异(或 sapply)。在现实世界的数据中,我可能有 1000 个g
组。
你可以试试,
with(df, paste0('g', cumsum(replace(d, is.na(d), 0) > 2)+1))
#[1] "g1" "g1" "g1" "g1" "g1" "g2" "g2" "g2"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句