首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合tapply以创建矩阵

组合tapply以创建矩阵
EN

Stack Overflow用户
提问于 2015-12-03 22:51:32
回答 1查看 498关注 0票数 0

我需要创建一个包含列(Swing,Blues,Contra)和行(M,F)的矩阵,使用来自data.frame的Ht数据。

我需要创建一个NA值矩阵,然后使用每个tapply函数的结果逐行填充该矩阵。

它需要看起来像这样:

代码语言:javascript
复制
    Swing    Blues   Contra
M    174.6   186.8   194.5
F    177.7    178    180.4

我拥有的两个tapply函数是:

代码语言:javascript
复制
 tapply(dancenewM$Ht,dancenewM$Type,mean)
 tapply(dancenewF$Ht,dancenewF$Type,mean)

示例数据:

代码语言:javascript
复制
  Sex Type   Ht
  F   Swing  177.9 
  F   Swing  177.5 
  F   Contra 179.6 
  F   Contra 181.3 
  F   Blues  179.7 
  F   Blues  176.3 
  M   Swing  172.7  
  M   Swing  176.5 
  M   Contra 194.6
  M   Contra 194.4  
  M   Blues  193.4 
  M   Blues  180.2 "))

在这方面的任何帮助都将非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-12-03 22:53:23

我们可以使用分组变量为‘性别’和‘类型’的tapply来获得'Ht‘的mean

代码语言:javascript
复制
with(df1, tapply(Ht, list(Sex = Sex, Type), FUN= mean))

# Sex Blues Contra Swing
#   F 178.0 180.45 177.7
#   M 186.8 194.50 174.6

或者我们可以使用data.table

代码语言:javascript
复制
library(data.table)
dcast(setDT(df1), Sex~Type, value.var='Ht', mean)
#    Sex Blues Contra Swing
# 1:   F 178.0 180.45 177.7
# 2:   M 186.8 194.50 174.6

数据

代码语言:javascript
复制
df1 <- structure(list(Sex = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L), .Label = c("F", "M"), class = "factor"), 
    Type = structure(c(3L, 3L, 2L, 2L, 1L, 1L, 3L, 3L, 2L, 2L, 
    1L, 1L), .Label = c("Blues", "Contra", "Swing"), class = "factor"), 
    Ht = c(177.9, 177.5, 179.6, 181.3, 179.7, 176.3, 172.7, 176.5, 
    194.6, 194.4, 193.4, 180.2)), .Names = c("Sex", "Type", "Ht"
), class = "data.frame", row.names = c(NA, -12L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34069035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档