R количество строк между двумя строками с указанными c переменными - PullRequest
0 голосов
/ 15 марта 2020

Моя цель - подсчитать количество строк между строками с указанными c значениями. Моя отправная точка такова:

  id=c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2),
  var1=c('A', 'B', 'E', 'N', 'J', 'B', 'J', 'A', 'C', 'B', 'L', 'M', 'B', 'C', 'F'),
  var2=c(1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1 )
)

Цель состоит в том, чтобы подсчитать количество строк, сгруппированных по id, между строкой с var1 = 'B' и var2 = '1' и строкой с var1 = 'B' и var2 = '2'. Таким образом, для id = 1 таких строк 3, а для id 2 таких строк 2. Моя цель такова:

  id=c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2),
  var1=c('A', 'B', 'E', 'N', 'J', 'B', 'J', 'A', 'C', 'B', 'L', 'M', 'B', 'C', 'F'),
  var2=c(1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1 ),
  num=c(NA, NA, 1, 2, 3, NA, NA, NA, NA, NA, 1, 2, NA, NA, NA)            
 )

То, что я пробовал раньше: Подсчет количества строк между двумя указанными c строками Я до сих пор не уверен, какую задачу пытается выполнить этот человек к выполнению sh. Я также попробовал это: Подсчет количества строк между строками Этот бит считает не между 2 строками, а начиная с верхней строки. Мне нужно посчитать между указанными строками. Я понимаю, что эта задача может быть решена различными способами. Например, я могу просто выбрать только те строки, которые мне нужны для подсчета, и отбросить все остальное. Или я могу сосчитать в рамках данных, которые у меня есть. Но я не уверен, как это сделать.

1 Ответ

1 голос
/ 15 марта 2020

Вы можете попробовать что-то вроде этого:

library(tidyverse)

my_df <- tibble(
  id=c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2),
  var1=c('A', 'B', 'E', 'N', 'J', 'B', 'J', 'A', 'C', 'B', 'L', 'M', 'B', 'C', 'F'),
  var2=c(1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1 )
)

my_df %>%
  mutate(rw_nm = row_number()) %>%
  filter(var1 == "B" & var2 %in% c(1,2))%>%
  group_by(id) %>%
  summarise(count = (rw_nm[[2]] - rw_nm[[1]])-1)
#> # A tibble: 2 x 2
#>      id count
#>   <dbl> <dbl>
#> 1     1     3
#> 2     2     2
...