Как рассчитать удельный курс среди трех классов? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь рассчитать выживаемость с помощью фрейма данных «Титаник».

Я отфильтровал объект с именем «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

Что означает это сообщение? И как я могу получить необходимую выживаемость?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Прежде чем предоставить какое-либо решение, важно знать, как отследить ошибку.В отчете об ошибке указывается, на каком этапе возникает проблема.Я взял общедоступный титанический набор данных, чтобы создать фрейм данных, который, как я полагаю, напоминает ваш фрейм данных

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)

Во время выполнения вашего кодового блока проблема заключалась в подсчете (Survived = 'Yes').Синтаксис логического сравнения не был правильным, как упомянуто mgiormenti.Как только вы исправите логическое сравнение, вы получите ошибку, которая не подходит для вашего класса объектов 'Survived'.Граф не работает с dplyr.Лучшими альтернативами являются сумма, длина и 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 [Survived == 'Yes']

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   
0 голосов
/ 05 апреля 2019

Прежде всего, в следующий раз приведите воспроизводимый пример. Вы можете легко сделать это, например, с помощью dput(Male_adult_passenger).

В любом случае эта ошибка возникает из-за использования присваивания Survived = 'Yes' вместо сравнения Survived == 'Yes'.

Попробуйте исправить это, но я думаю, что count будет хлопотно. Если это не сработает, попробуйте:

Male_adult_passenger %>%
  group_by(Class) %>%
  summarise(S_rates = sum(Survived == 'Yes')/n())

Если это не помогло, предоставьте образец, отредактировав свой вопрос, и я буду рад его рассмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...