#r
#r
Вопрос:
Я пытаюсь рассчитать коэффициент выживаемости с помощью фрейма данных ‘Titanic’.
Я отфильтровал объект с именем «Male_adult_passengers», чей векторный «Класс» включает в себя три ранга.
Есть еще один столбец, в котором записывается условие выживания («да» или «нет»)
И я хотел бы получить показатели выживаемости внутри разных классов и сравнить их.
Я применил пакет dplyr и попробовал кодирование как:
Male_adult_passenger %>%
group_by(Class) %>%
summarise(S_rates = count(Survived = 'Yes')/count(Survived))
Но получилось только сообщение об ошибке:
Error in group_vars(x) : argument "x" is missing, with no default
Что означает это сообщение? И как я могу получить необходимый коэффициент выживаемости?
Большое вам спасибо.
Ответ №1:
Прежде всего, в следующий раз, пожалуйста, предоставьте воспроизводимый пример. Вы можете легко сделать это, например, с помощью dput(Male_adult_passenger)
.
В любом случае, эта ошибка возникает из-за использования присваивания Survived = 'Yes'
вместо сравнения Survived == 'Yes'
.
Попробуйте исправить это, но я предполагаю, что count
это будет проблематично. Если это не сработает, попробуйте:
Male_adult_passenger %>%
group_by(Class) %>%
summarise(S_rates = sum(Survived == 'Yes')/n())
Если это все еще не работает, пожалуйста, предоставьте пример, отредактировав свой вопрос, и я буду рад изучить его дальше.
Ответ №2:
Прежде чем я предоставлю какое-либо решение, важно знать, как отследить ошибку. В отчете об ошибке указано, на каком этапе возникает проблема. Я взял общедоступный набор данных titanic, чтобы создать фрейм данных, который, как я предполагаю, напоминает ваш фрейм данных
library(dplyr)
titanic<-read.csv('titanic.csv')
Male_adult_passenger<-subset(titanic,Sex=='male')
Male_adult_passenger$Survived<-ifelse(Male_adult_passenger$Survived==0,"No","Yes")
Male_adult_passenger$Survived<-factor(Male_adult_passenger$Survived)
Во время выполнения вашего кодового блока возникла проблема с count (Сохранился = ‘Yes’). Синтаксис логического сравнения был неправильным, как упоминал mgiormenti. Как только вы исправите логическое сравнение, вы получите сообщение об ошибке, что count не является применимым методом для вашего класса объектов ‘Survived’. Count не работает с dplyr. Наилучшими альтернативами являются sum, length и n()
n() подсчитывает количество наблюдений в вашем сгруппированном классе объектов.
Male_adult_passenger %>%
group_by(Pclass,Survived) %>%
summarize(n())
Pclass Survived n()
<int> <chr> <int>
1 No 77
1 Yes 45
2 No 91
2 Yes 17
3 No 296
3 Yes 47
Альтернативой n () для символьных столбцов является функция длины. Вероятно, вам нужна длина столбца Survived, где Survived==’Yes’, Survived[Выжил==’Да’]
Male_adult_passenger %>%
group_by(Pclass) %>%
summarize(S_rates=length(Survived[Survived=="Yes"])/n())
Pclass S_rates
<int> <dbl>
1 0.3688525
2 0.1574074
3 0.1370262