我需要创建一个包含列(Swing,Blues,Contra)和行(M,F)的矩阵,使用来自data.frame的Ht数据。
我需要创建一个NA值矩阵,然后使用每个tapply函数的结果逐行填充该矩阵。
它需要看起来像这样:
Swing Blues Contra
M 174.6 186.8 194.5
F 177.7 178 180.4我拥有的两个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 "))在这方面的任何帮助都将非常感谢。
发布于 2015-12-03 22:53:23
我们可以使用分组变量为‘性别’和‘类型’的tapply来获得'Ht‘的mean。
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))https://stackoverflow.com/questions/34069035
复制相似问题