2014-01-22 6 views
1

У меня есть кадр данных в R с 2 переменными [например. высота, вес] Я бы хотел рассчитать корреляцию наряду с несколькими другими ковариатами [такими как пол, этническая принадлежность].Как извлечь имена из списков в R

Я бы хотел рассчитать значение R^2 для высоты и веса для каждой группы пола и этнической принадлежности. Например. R^2 для высоты против веса для мужских & кавказцев, Женский & кавказцев, азиатов Мужской &, Женский & кавказцев и т.д.

я выяснил «по» команде было бы полезно в этом.

cor <- by(data[,c(6,7)],list(data$sex,data$ethnicity),cor) 

> cor 
: Female 
: African American 
      wt  ht 
wt 1.0000000 0.6879572 
ht 0.6879572 1.0000000 
------------------------------------------------------------------------------------------------------------------------------------------------ 
: Male 
: African American 
      wt  ht 
wt 1.0000000 0.6868178 
ht 0.6868178 1.0000000 
------------------------------------------------------------------------------------------------------------------------------------------------ 
: Female 
: Hispanic 
      wt  ht 
wt 1.0000000 0.6162962 
ht 0.6162962 1.0000000 
------------------------------------------------------------------------------------------------------------------------------------------------ 
: Male 
: Hispanic 
      wt  ht 
wt 1.0000000 0.5854748 
ht 0.5854748 1.0000000 

Мой вопрос, я хотел бы преобразовать эти результаты, которые в виде списка, в кадр данных со следующими столбцами:

R2_value Sex Этничность

Мой вопрос как я могу вывести значения пола и этнической принадлежности из списка «cor» (мой вывод из команды «by»).

Когда я делаю «cor [[1]]», я просто получаю корреляционную матрицу для женщин, афроамериканцев.

Вызов «имен (cor)» не дает мне то, что я хочу.

+0

Вы должны взглянуть на 'ldply' в пакете plyr. Он возьмет список и вернет data.frame. – John

+1

включают подмножество вашего набора данных с использованием 'dput()' или предоставить воспроизводимый пример. – marbel

+1

Что сказал Мартин. Кроме того, ожидаете ли вы правильного ответа включить вычисление R^2 из корреляционной матрицы? –

ответ

0

Это первая попытка решить эту проблему. Я не уверен, будет ли результат работать, потому что вы не выразили, как у вас есть данные изначально. Попробуйте код и сообщите свой результат!

set.seed(123) 
# Coerce your data.frame to a data.table 
require("data.table") 
DT <- data.table(data) 
DT <- data.table(wt = rnorm(100, 80, 10), 
       ht = rnorm(100, 110, 10), 
       sex = factor(sample(c("MALE", "FEMALE"), 100, replace = T)), 
       ethnicity = factor(sample(c("African American", "Hispanic"), 100, replace = T)) 
       ) 

str(DT) 

DT[, cor(wt,ht), by="sex,ethnicity"] 
Смежные вопросы