Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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:如何在每次新序列开始时启动新的sub_id_R_Group By_Sequence_Rowid - Fatal编程技术网

R:如何在每次新序列开始时启动新的sub_id

R:如何在每次新序列开始时启动新的sub_id,r,group-by,sequence,rowid,R,Group By,Sequence,Rowid,假设我有如下数据: tibble( A = c(1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5), B = c(1, 1, 2, 1, 2, 3, 1, 2, 1, 1, 1, 2, 3, 4, 1, 1), ) i、 e #一个tible:16 x 3 A B sub_id 1 1 1 1 2 2 1 1 3 2 2 1 4 2 1

假设我有如下数据:

tibble(
    A = c(1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5),
    B = c(1, 1, 2, 1, 2, 3, 1, 2, 1, 1, 1, 2, 3, 4, 1, 1),
)
i、 e

#一个tible:16 x 3
A B sub_id
1     1     1      1
2     2     1      1
3     2     2      1
4     2     1      2
5     2     2      2
6     2     3      2
7     3     1      1
8     3     2      1
9     3     1      2
10     3     1      3
11     4     1      1
12     4     2      1
13     4     3      1
14     4     4      1
15     4     1      2
16     5     1      1
希望这是很好的定义。我想我想要的是一种与行数相反的数

提前感谢,


James.

我们可以使用
分组
cumsum

library(dplyr)

df %>%
  group_by(A) %>%
  mutate(sub_id = cumsum(B==1)
输出:

# Groups:   A [5]
       A     B sub_id
   <dbl> <dbl>  <int>
 1     1     1      1
 2     2     1      1
 3     2     2      1
 4     2     1      2
 5     2     2      2
 6     2     3      2
 7     3     1      1
 8     3     2      1
 9     3     1      2
10     3     1      3
11     4     1      1
12     4     2      1
13     4     3      1
14     4     4      1
15     4     1      2
16     5     1      1
分组:A[5] A B sub_id 1 1 1 1 2 2 1 1 3 2 2 1 4 2 1 2 5 2 2 2 6 2 3 2 7 3 1 1 8 3 2 1 9 3 1 2 10 3 1 3 11 4 1 1 12 4 2 1 13 4 3 1 14 4 4 1 15 4 1 2 16 5 1 1
我们可以使用
分组
cumsum

library(dplyr)

df %>%
  group_by(A) %>%
  mutate(sub_id = cumsum(B==1)
输出:

# Groups:   A [5]
       A     B sub_id
   <dbl> <dbl>  <int>
 1     1     1      1
 2     2     1      1
 3     2     2      1
 4     2     1      2
 5     2     2      2
 6     2     3      2
 7     3     1      1
 8     3     2      1
 9     3     1      2
10     3     1      3
11     4     1      1
12     4     2      1
13     4     3      1
14     4     4      1
15     4     1      2
16     5     1      1
分组:A[5] A B sub_id 1 1 1 1 2 2 1 1 3 2 2 1 4 2 1 2 5 2 2 2 6 2 3 2 7 3 1 1 8 3 2 1 9 3 1 2 10 3 1 3 11 4 1 1 12 4 2 1 13 4 3 1 14 4 4 1 15 4 1 2 16 5 1 1 您已经准备好了“配料”

(i) 对于A列的每组 (ii)检查新序列是否开始

以下内容基于
{dplyr}
。出于演示目的,我创建了一个额外的列/变量来显示“开始条件”。你可以把它合并成一个电话

我使用真/假代码之和等于1的事实。如果这对您来说不明显,您可以使用
as.numeric(B==1)

库(dplyr)
图书馆(tibble)
#加载示例数据
df%
组别(A)%>%
变异(
#------突出显示新序列的开始--------------
开始=B==1
#------在TRUEs上创建cumsum----------------------
,sub_id2=cumsum(开始)
)
这将产生您想要的结果:

# A tibble: 16 x 5
# Groups:   A [5]
       A     B sub_id start sub_id2
   <dbl> <dbl>  <dbl> <lgl>   <int>
 1     1     1      1 TRUE        1
 2     2     1      1 TRUE        1
 3     2     2      1 FALSE       1
 4     2     1      2 TRUE        2
 5     2     2      2 FALSE       2
 6     2     3      2 FALSE       2
 7     3     1      1 TRUE        1
 8     3     2      1 FALSE       1
 9     3     1      2 TRUE        2
10     3     1      3 TRUE        3
11     4     1      1 TRUE        1
12     4     2      1 FALSE       1
13     4     3      1 FALSE       1
14     4     4      1 FALSE       1
15     4     1      2 TRUE        2
16     5     1      1 TRUE        1
#一个tible:16 x 5
#分组:A[5]
A B子单元id开始子单元id2
1正确的1
2 1 1正确的1
3 2 1错误1
4 2 1 2真实2
5 2错误2
6 2 3 2假2
7 3 1真实的1
8 3 2 1错误1
9 3 1 2真实的2
10 3 1 3真实的3
11 4 1真实的1
12 4 2 1错误1
13 4 3 1错误1
14 4 1错误1
15 4 1 2正确的2
16511真实的1
您已经准备好了“配料”

(i) 对于A列的每组 (ii)检查新序列是否开始

以下内容基于
{dplyr}
。出于演示目的,我创建了一个额外的列/变量来显示“开始条件”。你可以把它合并成一个电话

我使用真/假代码之和等于1的事实。如果这对您来说不明显,您可以使用
as.numeric(B==1)

库(dplyr)
图书馆(tibble)
#加载示例数据
df%
组别(A)%>%
变异(
#------突出显示新序列的开始--------------
开始=B==1
#------在TRUEs上创建cumsum----------------------
,sub_id2=cumsum(开始)
)
这将产生您想要的结果:

# A tibble: 16 x 5
# Groups:   A [5]
       A     B sub_id start sub_id2
   <dbl> <dbl>  <dbl> <lgl>   <int>
 1     1     1      1 TRUE        1
 2     2     1      1 TRUE        1
 3     2     2      1 FALSE       1
 4     2     1      2 TRUE        2
 5     2     2      2 FALSE       2
 6     2     3      2 FALSE       2
 7     3     1      1 TRUE        1
 8     3     2      1 FALSE       1
 9     3     1      2 TRUE        2
10     3     1      3 TRUE        3
11     4     1      1 TRUE        1
12     4     2      1 FALSE       1
13     4     3      1 FALSE       1
14     4     4      1 FALSE       1
15     4     1      2 TRUE        2
16     5     1      1 TRUE        1
#一个tible:16 x 5
#分组:A[5]
A B子单元id开始子单元id2
1正确的1
2 1 1正确的1
3 2 1错误1
4 2 1 2真实2
5 2错误2
6 2 3 2假2
7 3 1真实的1
8 3 2 1错误1
9 3 1 2真实的2
10 3 1 3真实的3
11 4 1真实的1
12 4 2 1错误1
13 4 3 1错误1
14 4 1错误1
15 4 1 2正确的2
16511真实的1

使用
基本R

df$sub_id <- with(df, ave(B ==1, A, FUN = cumsum))

df$sub_id使用
base R

df$sub_id <- with(df, ave(B ==1, A, FUN = cumsum))

df$sub_idA
data.table
option

> setDT(df)[, sub_id := cumsum(B == 1), A][]
    A B sub_id
 1: 1 1      1
 2: 2 1      1
 3: 2 2      1
 4: 2 1      2
 5: 2 2      2
 6: 2 3      2
 7: 3 1      1
 8: 3 2      1
 9: 3 1      2
10: 3 1      3
11: 4 1      1
12: 4 2      1
13: 4 3      1
14: 4 4      1
15: 4 1      2
16: 5 1      1

A
数据表
选项

> setDT(df)[, sub_id := cumsum(B == 1), A][]
    A B sub_id
 1: 1 1      1
 2: 2 1      1
 3: 2 2      1
 4: 2 1      2
 5: 2 2      2
 6: 2 3      2
 7: 3 1      1
 8: 3 2      1
 9: 3 1      2
10: 3 1      3
11: 4 1      1
12: 4 2      1
13: 4 3      1
14: 4 4      1
15: 4 1      2
16: 5 1      1

明亮的我没有意识到你可以通过变异来做到这一点。谢谢明亮的我没有意识到你可以通过变异来做到这一点。谢谢非常整洁。非常感谢。没想到底座这么灵活,很整洁。非常感谢。没有意识到基地是如此灵活。