Вычислить количество строк между строками с указанным c ID в R - PullRequest
0 голосов
/ 18 июня 2020

У меня есть такая таблица:

Я импортирую данные в R.

Я ищу способ подсчета номера строк с типом «Пользовательская история» под каждой строкой с типом «Характеристика». И я хочу отображать результат для каждой функции в столбце «Сумма» для каждой функции

«Функция» - это категория, а «история пользователя» - это подкатегория. Все пользовательские истории, относящиеся к определенной функции, отображаются в строках под этой функцией. Я хочу подсчитать количество пользовательских историй, относящихся к каждой функции.

До сих пор я не нашел ничего лучше, чем вычисление этого числа вручную в Excel, используя функцию COUNTA() для пользовательских историй по каждой функции.

Спасибо

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вот решение base R:

df$Sum <- with(df, ave(Type, FUN = function(x) cumsum(!startsWith(Type, "User Story"))))
df$Sum <- with(df, ave(Sum, Sum, FUN = length))
df$Sum <- as.numeric(df$Sum)
df$Sum <- df$Sum - 1
df$Sum[df$Type == "User Story"] <- ""

Вот более краткое dplyr решение:

df %>% 
  mutate(id = cumsum(!startsWith(Type, "User"))) %>% 
  group_by(id) %>% 
  mutate(Sum = length(id) - 1,
         Sum = ifelse(Type == "Feature", Sum, NA)) %>% 
  select(-id)

Что дает:

         Type       Title Sum
1     Feature UC 06-02-01   5
2  User Story Description    
3  User Story Description    
4  User Story Description    
5  User Story Description    
6  User Story Description    
7     Feature UC 06-02-02   6
8  User Story Description    
9  User Story Description    
10 User Story Description    
11 User Story Description    
12 User Story Description    
13 User Story Description    
14    Feature UC 06-02-03   1
15 User Story Description    
16    Feature UC 06-02-04   0

Данные:

df <- structure(list(Type = c("Feature", "User Story", "User Story", 
"User Story", "User Story", "User Story", "Feature", "User Story", 
"User Story", "User Story", "User Story", "User Story", "User Story", 
"Feature", "User Story", "Feature"), Title = c("UC 06-02-01", 
"Description", "Description", "Description", "Description", "Description", 
"UC 06-02-02", "Description", "Description", "Description", "Description", 
"Description", "Description", "UC 06-02-03", "Description", "UC 06-02-04"
)), row.names = c(NA, -16L), class = c("tbl_df", "tbl", "data.frame"
))
0 голосов
/ 18 июня 2020

Я вставил «Историю пользователя»:

df <- tibble(
  type = c("feature", "a", "a", "a", "feature", "a", "feature", "a", "a")
) %>% 
  mutate(
    feature_group = if_else(type == "feature", 1, 0) %>% cumsum()
  )

count_df <- df %>%
  group_by(feature_group) %>%
  summarise(n = sum(type == "a"))

df %>%
  left_join(count_df, by = "feature_group") %>%
  select(-feature_group) %>%
  mutate(n = if_else(type == "feature", n, NA_integer_))

, что дает:

# A tibble: 9 x 2
  type        n
  <chr>   <int>
1 feature     3
2 a          NA
3 a          NA
4 a          NA
5 feature     1
6 a          NA
7 feature     2
8 a          NA
9 a          NA
...