Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过组变量创建计数连续变量_R - Fatal编程技术网

R 通过组变量创建计数连续变量

R 通过组变量创建计数连续变量,r,R,我有这样的数据: df<-data.frame(one=c(1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 7), test=c(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0)) df一个选项是来自数据的rleid。表,按“一”的游程长度id分组,“测试”,将“测试”的和作为“想要”,按“一”分组,将“想要”变异为“想要”的max library(dplyr) library(d

我有这样的数据:

df<-data.frame(one=c(1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 7), 
               test=c(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0))

df一个选项是来自
数据的
rleid
。表
,按“一”的游程长度id分组,“测试”,将“测试”的
和作为“想要”,按“一”分组,
将“想要”变异为“想要”的
max

library(dplyr)
library(data.table)
df %>% 
   group_by(grp = rleid(one, test))%>%
   mutate(want = sum(test)) %>%
   group_by(one) %>%
   mutate(want = max(want)) %>%       
   dplyr::select(-grp)
# A tibble: 15 x 3
# Groups:   one [7]
#     one  test  want
#   <dbl> <dbl> <dbl>
# 1     1     1     2
# 2     1     1     2
# 3     2     1     1
# 4     2     0     1
# 5     2     1     1
# 6     3     1     2
# 7     3     1     2
# 8     4     1     3
# 9     4     1     3
#10     4     1     3
#11     5     0     1
#12     5     1     1
#13     6     1     1
#14     7     0     0
#15     7     0     0

一个选项是来自
数据的
rleid
。表
,按“一”的游程长度id分组,“测试”,将“测试”的
作为“想要”,按“一”分组,
想要”变为“想要”的
最大值

library(dplyr)
library(data.table)
df %>% 
   group_by(grp = rleid(one, test))%>%
   mutate(want = sum(test)) %>%
   group_by(one) %>%
   mutate(want = max(want)) %>%       
   dplyr::select(-grp)
# A tibble: 15 x 3
# Groups:   one [7]
#     one  test  want
#   <dbl> <dbl> <dbl>
# 1     1     1     2
# 2     1     1     2
# 3     2     1     1
# 4     2     0     1
# 5     2     1     1
# 6     3     1     2
# 7     3     1     2
# 8     4     1     3
# 9     4     1     3
#10     4     1     3
#11     5     0     1
#12     5     1     1
#13     6     1     1
#14     7     0     0
#15     7     0     0

您可以使用
rle
获得
1
不同运行的长度,然后取这些长度的最大值

library(dplyr)
df %>%
    group_by(one) %>%
    mutate(want = with(rle(test == 1), max(0, lengths[values], na.rm = TRUE)))

您可以使用
rle
获得
1
不同运行的长度,然后取这些长度的最大值

library(dplyr)
df %>%
    group_by(one) %>%
    mutate(want = with(rle(test == 1), max(0, lengths[values], na.rm = TRUE)))

尝试使用
ave
、按
one
列分组和
test
列中不等于1的累积值之和在基数R中进行分组:

ave(df$test, list(df$one, cumsum(df$test != 1)), FUN=function(x) if(any(x==1)) sum(x) else x )
# [1] 2 2 1 1 1 2 2 3 3 3 1 1 1 0 0
这一逻辑的一个缩写为@RonakShah,其帽尖为:

ave(df$test == 1, df$one, cumsum(df$test != 1), FUN = sum)

尝试使用
ave
、按
one
列分组和
test
列中不等于1的累积值之和在基数R中进行分组:

ave(df$test, list(df$one, cumsum(df$test != 1)), FUN=function(x) if(any(x==1)) sum(x) else x )
# [1] 2 2 1 1 1 2 2 3 3 3 1 1 1 0 0
这一逻辑的一个缩写为@RonakShah,其帽尖为:

ave(df$test == 1, df$one, cumsum(df$test != 1), FUN = sum)

不,ID==5只有一个连续的测试不,ID==5只有一个连续的测试你能给你的代码示例添加一个解释吗?这将有助于其他用户了解这里发生了什么。您能在代码示例中添加解释吗?这将有助于其他用户了解这里发生了什么。@RonakShah-实际上这要好得多。已经编辑好了。@RonakShah-实际上好多了。编辑过。