Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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,问题是我想计算两行之间的行数,这两行共享相同的值 我发现了一个与我类似的问题,但不同的是我想计算该问题中B之后a的数量,并按id分组(可能没有必要,因为在我的数据中,每个id的起始值始终为0) 链接在这里 假设我有如下数据 a <- data.frame( id = c(1, 1, 1, 1, 2, 2, 2, 2, 2), visits = c(0, 0, 1, 0, 0, 1, 2, 0, 0) ) a如果我理解正确,我想这会满足您的要求 libra

问题是我想计算两行之间的行数,这两行共享相同的值

我发现了一个与我类似的问题,但不同的是我想计算该问题中B之后a的数量,并按id分组(可能没有必要,因为在我的数据中,每个id的起始值始终为0) 链接在这里

假设我有如下数据

 a  <- data.frame(
    id     = c(1, 1, 1, 1, 2, 2, 2, 2, 2), 
    visits = c(0, 0, 1, 0, 0, 1, 2, 0, 0)
 )

a如果我理解正确,我想这会满足您的要求

library(dplyr)
a %>% 
  group_by(id) %>% 
  mutate(grp=cumsum(visits==0)) %>% 
  group_by(id, grp) %>% 
  mutate(z=ifelse(visits!=0, NA, sum(visits!=0))) %>% 
  ungroup() %>% mutate(grp=NULL)

在这里,我们使用第一个mutate中的
cumsum()
将数据“拆分”为零,并运行非零。然后我们根据这些运行进行分组,并通过将z设置为每个运行中的非零数量来创建变量。最后,我们去掉了临时分组变量。

这将在比现有答案更一般的设置下工作,也就是说,还添加重复
1
的计数和任何其他值。每组的最后一行是
NA
,但这很容易更改

   a %>%
      group_by(id) %>%
      mutate(
        c = map_dbl(
          seq_along(visits),
          ~ {
            m <- which(visits[.x] == visits[-seq(.x)])
            if (length(m) == 0) NA else min(m) - 1
          }
          )
        )

# A tibble: 9 x 3
# Groups:   id [2]
     id visits     c
  <dbl>  <dbl> <dbl>
1     1      0     0
2     1      0     1
3     1      1    NA
4     1      0    NA
5     2      0     2
6     2      1    NA
7     2      2    NA
8     2      0     0
9     2      0    NA
a%>%
分组依据(id)%>%
变异(
c=map_dbl(
顺序(参观),
~ {

m我无法从你的输出中理解你在追求什么。什么是事件“A”和“B”这里?你想
z
包含下一个零值之前出现的非零值的数量?A,B只是我找到的问题中的一个例子。对于我的数据,我想用z来计算零值之后出现的非零值的数量。我希望这能让我的问题清楚,谢谢
   a %>%
      group_by(id) %>%
      mutate(
        c = map_dbl(
          seq_along(visits),
          ~ {
            m <- which(visits[.x] == visits[-seq(.x)])
            if (length(m) == 0) NA else min(m) - 1
          }
          )
        )

# A tibble: 9 x 3
# Groups:   id [2]
     id visits     c
  <dbl>  <dbl> <dbl>
1     1      0     0
2     1      0     1
3     1      1    NA
4     1      0    NA
5     2      0     2
6     2      1    NA
7     2      2    NA
8     2      0     0
9     2      0    NA