R: Подсчитать количество строк в модели, исключая определенные переменные, если они присутствуют - PullRequest
1 голос
/ 08 июня 2019

У меня есть таблица, которая выглядит следующим образом:

modelsummary <- data.frame(term = c("(Intercept)", "month1", "month2", "RateDiff", "var1", "var2", "var3", "(Intercept)", "month1", "var1", "var2", "var3"), mod_id = c(1,1,1,1,1,1,1,2,2,2,2,2))

Я хочу посчитать количество переменных, кроме перехвата, месяца, номинального значения в каждой модели.Мой желаемый вывод:

modelsummary <- data.frame(term = c("(Intercept)", "month1", "month2", "RateDiff", "var1", "var2", "var3", "(Intercept)", "month1", "var1", "var2", "var3"), mod_id = c(1,1,1,1,1,1,1,2,2,2,2,2), variables = c(3,3,3,3,3,3,3,3,3,3,3,3))

Я пытался получить флаг, используя:

modelsummary$dim <- apply(modelsummary[, "term"], MARGIN = 1, 
                  function(x) sum(!(x %in% c(grep("month", x), "RateDiff")), na.rm = T))

, но grep(month) не работает.

modelsummary$dim <- apply(modelsummary[, "term"], MARGIN = 1, 
                  function(x) sum(!(x %in% c("month", "RateDiff")), na.rm = T))

Это работает, но месяц, за которым следует суффикс, не фиксируется.

Я хочу что-то эквивалентное ~ ilike ~ из sql для переменных intercept, month и RateDiff, как яне хочу, чтобы он был чувствительным к регистру, и хочу разрешить суффикс и префикс для переменных.Как мне этого добиться?

1 Ответ

2 голосов
/ 08 июня 2019

Вот один способ с dplyr -

modelsummary %>% 
  mutate(
    variables = term[!grepl(pattern = "intercept|month|ratediff", tolower(term))] %>% 
      n_distinct()
  )

          term mod_id variables
1  (Intercept)      1         3
2       month1      1         3
3       month2      1         3
4     RateDiff      1         3
5         var1      1         3
6         var2      1         3
7         var3      1         3
8  (Intercept)      2         3
9       month1      2         3
10        var1      2         3
11        var2      2         3
12        var3      2         3

Или с dplyr и stringr:

modelsummary %>%
  mutate(
    variables = str_subset(tolower(term), "intercept|month|ratediff", TRUE) %>% 
      n_distinct()
  )

Добавьте group_by(mod_id) перед mutate, если выхочу посчитать количество переменных на mod_id.

в базе R -

modelsummary$variables <- with(modelsummary, 
               term[!grepl(pattern = "intercept|month|ratediff", tolower(term))] %>% 
               unique() %>% length()
               )
...