Как разделить фрейм данных на основе одной переменной и создать кросс-таблицу отдельно между двумя другими переменными отдельно для первой переменной? - PullRequest
0 голосов
/ 05 ноября 2018

Мой набор данных: df

PID<-c(1,2,3,4,5,6,7,8,9)  
gender<-c(1,1,0,1,0,0,0,1,1)  
smoking<-c(1,1,0,0,0,0,1,0,1)  
disease<-c(1,0,0,1,1,1,0,1,0)  
BMI<-c(24,23,21,28,29,21,18,19,16)    
 df<-data.frame(PID, gender, smoking, disease, BMI)

Я хочу разделить этот набор данных по полу. Затем разработайте перекрестную таблицу между курением и болезнями. Как это сделать?
Ожидаемый результат (первый вопрос):
Пол: 1
перекрестная таблица между курением и болезнями

Пол: 2
Перекрестная таблица между курением и болезнями.

Ожидаемый результат (второй вопрос):

Пол: 1
среднее значение ИМТ

Пол: 2
среднее значение ИМТ

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Нет необходимости во внешних пакетах:

xtabs(~smoking+disease+gender,data=df)
# , , gender = 0
#        disease
# smoking 0 1
#       0 1 2
#       1 1 0
# , , gender = 1
#        disease
# smoking 0 1
#       0 0 2
#       1 2 1
aggregate(df$BMI, list(gender=df$gender), FUN=mean)
#   gender     x
# 1      0 22.25
# 2      1 22.00

Аналогично (спасибо thelatemail):

aggregate(BMI ~ gender, data = df, FUN=mean)
0 голосов
/ 05 ноября 2018

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

library(dplyr)
library(magrittr)


> df %>% split(gender) %>% lapply(function(x) tab=xtabs(gender~smoking+disease, data=x))
$`0`
       disease
smoking 0 1
      0 0 0
      1 0 0

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