Сумма не учитывает определенные векторы символов с суммированием в dplyr

#r #dplyr

Вопрос:

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

 Letters lt;- c("A","A","B", "B")   Pass lt;- c("Pass", "Fail", "Pass", "Fail")  df lt;- data.frame( Letters, Pass)  sum(df$Pass=="Fail")  

 [1] 2  

Когда я использую sum в dplyr, это не считается таким же образом:

 Pass_summary lt;- df %gt;% group_by(Letters) %gt;%   summarise(n=n(),   Pass=sum(Pass=="Pass"),   Fail=sum(Pass=="Fail")  )  

введите описание изображения здесь

Теперь я понимаю из комментария MrGrumble, что пропуск переназначается в 3-й строке. Хотя я думал, что необходимо использовать mutate() для ссылки на переменную, назначенную на этапе подведения итогов ()?

Комментарии:

1. вы учитываетесь в каждой группе. Попробуйте повторить код без %gt;% group_by(букв)

2. В dplyr подходе, которым вы группируетесь df Letters . Поэтому, естественно, вы получаете Pass и Fail учитываете каждую букву

3. это также не считается неудачным, когда я удаляю %gt;% group_by(буквы)

4. Когда вы доберетесь до 3-й строки i summarise , с Fail , переменная Pass изменилась. Вы буквально пытаетесь подвести sum(Pass=="Pass") итог . Попробуйте переключить 2-ю и 3-ю строки в сводке.

5. Попробуй table(df)

Ответ №1:

Ты превыше Pass всего !

Попробуйте изменить порядок summarize :

 df %gt;% group_by(Letters) %gt;%   summarise(n=n(),   Fail=sum(Pass=="Fail"),  Pass=sum(Pass=="Pass")  )  

Выход:

 Letters n Fail Pass  lt;chrgt; lt;intgt; lt;intgt; lt;intgt; 1 A 2 1 1 2 B 2 1 1  

Или просто не называйте это «Проходом»!