首页 文章

结合tapply创建一个矩阵

提问于
浏览
0

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

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

它需要看起来像这样:

Swing    Blues   Contra
M    174.6   186.8   194.5
F    177.7    178    180.4

我有2个tapply函数:

tapply(dancenewM$Ht,dancenewM$Type,mean)
 tapply(dancenewF$Ht,dancenewF$Type,mean)

样本数据:

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 "))

任何有关这方面的帮助将不胜感激 .

1 回答

  • 1

    我们可以将 tapply 与分组变量一起用作'sex'和'Type'来获取 meanmean .

    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

    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
    

    数据

    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))
    

相关问题