2014-01-22 20 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 性别 种族

我的问题是如何从名单“cor”(我的输出是“by”命令)中提取性别和种族的价值。

当我做“cor [[1]]”时,我只是得到女性,非裔美国人的相关矩阵。

调用“名称(cor)”不会给我我想要的。

+0

你应该看看plyr包中的'ldply'。它将获取一个列表并返回一个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"]