dplyr: как игнорировать NA в переменной группировки - PullRequest
0 голосов
/ 29 июня 2018

Используя dplyr, я пытаюсь сгруппировать по двум переменным. Теперь, если в одной переменной есть NA, но другая переменная совпадает, я бы все же хотел, чтобы эти строки были сгруппированы, а NA принимает значение, отличное от NA. Так что, если у меня есть фрейм данных, как это:

variable_A <- c("a", "a", "b", NA, "f")
variable_B <- c("c", "d", "e", "c", "c")
variable_C <- c(10, 20, 30, 40, 50)
df <- data.frame(variable_A, variable_B, variable_C)

И если бы я хотел сгруппировать по переменным_A и переменным_B, строки 1 и 4 обычно не сгруппировались бы, но я бы их хотел, в то время как NA переопределяется на «a». Как мне этого добиться? Ниже не работает.

df2 <- df %>%
         group_by(variable_A, variable_B) %>%
         summarise(total=sum(variable_C))

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете выполнить вменение отсутствующего значения, используя базу R, следующим образом:

 ii <- which(is.na(df$variable_A))
 jj <- which(df$variable_B == df$variable_B[ii])
 df_filled <- df
 df_filled$variable_A[jj] = df$variable_A[jj][!is.na(df$variable_A[jj])]

Затем сгруппируйте и суммируйте как запланировано с помощью dplyr

 df_filled %>%
 group_by(variable_A, variable_B) %>%
 dplyr::summarise(total=sum(variable_C))
0 голосов
/ 29 июня 2018

Вы можете сначала сгруппировать по B, а затем заполнить пропущенные значения A. Затем продолжите то, что вы хотели сделать:

df_filled = df %>%
    group_by(variable_B) %>%
    mutate(variable_A = first(na.omit(variable_A)))

df_filled %>%
    group_by(variable_A, variable_B) %>%
    summarise(total=sum(variable_C))
...