#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
Или просто не называйте это «Проходом»!