rowSums только положительные значения в подкадре данных - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть df, который должен быть задан (с помощью переменной имени столбца).У меня возникли проблемы, потому что мне нужно создать 2 вычисления:

  1. сумма столбцов, предопределенных в переменной, если они> 0

  2. посчитать столбцы, предварительно определенные в переменной, если они> 0

Мой фактический df содержит 500 тыс. строк и 40 столбцов, но я задаю это с помощью:

BD[, var_names]
  may_18 jun_18 jul_18 ago_18 sep_18
   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1   NA     6.78   NA     4.88   NA  
2   42.9 262.   -198.   78.5    53.2
3   24.0  21.7    28.4  25.4    14.6
4  222   242.    284.  259.    283. 
5    0     0       0     0       0  
6  281.  486.    500.  485.    227. 

К настоящему времени я использовал

rowSums(BD[, var_names][which(var_names > 0)], na.rm = TRUE)

Но это не работает хорошо.Кроме того, я пробовал это для подсчета:

rowSums(BD[, var_names] > 0, na.rm = TRUE)

Ожидаемый результат для таблицы, что-то вроде

SUM COUNT
11,66   2
436,6   4
114,1   5
1290    5
0   0
1979    5

Заранее спасибо!

1 Ответ

1 голос
/ 26 апреля 2019

В базе R один подход может быть:

var_names <- c("may_18", "jun_18", "jul_18", "ago_18", "sep_18")

cbind(SUM = apply(df[var_names], 1, function(x) sum(x[x > 0], na.rm = TRUE)),
      COUNT = rowSums(df[var_names] > 0, na.rm = TRUE))

      SUM COUNT
1   11.66     2
2  436.60     4
3  114.10     5
4 1290.00     5
5    0.00     0
6 1979.00     5   

Или используя dplyr:

library(dplyr)

df %>%
  select(var_names) %>%
  transmute(SUM = rowSums(mutate_all(., ~if_else(.x < 0, NA_real_, .x)), na.rm = TRUE),
         COUNT = rowSums(. > 0, na.rm = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...