Объедините tapp, чтобы создать матрицу

Мне нужно создать матрицу со столбцами (Swing, Blues, Contra) и Rows (M, F), используя данные Ht из data.frame.

Мне нужно создать матрицу значений 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 "))

Любая помощь в этом будет принята с благодарностью.


person Vixxen81    schedule 03.12.2015    source источник


Ответы (1)


Мы можем использовать tapply с переменными группировки, такими как «пол» и «тип», чтобы получить mean из «Ht».

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))
person akrun    schedule 03.12.2015
comment
Он работает, но все еще не разделяет самцов и самок. Я просто получаю общее значение. - person Vixxen81; 03.12.2015
comment
@Vixxen81 Vixxen81 Основываясь на примере, который я создал, он разделяет «самцов» и «самок». Вы не привели ни одного примера ввода. Итак, если вы можете предоставить пример ввода, а затем прокомментировать, это может иметь больше смысла. - person akrun; 03.12.2015
comment
@ Vixxen81 Почему бы вам не обновить свой пост примером? - person akrun; 03.12.2015
comment
Извините, я пытаюсь. Спасибо. - person Vixxen81; 03.12.2015
comment
@ Vixxen81 Ладно, мне пора идти. Проверю позже. - person akrun; 03.12.2015
comment
Код @ Vixxen81 akrun работает для примера, который вы привели with(df1, tapply(Ht, list(Sex, Type), FUN= mean)) - person rawr; 03.12.2015
comment
Итак, вот как мне нужно это сделать. Мне нужно создать матрицу значений NA, а затем заполнить матрицу построчно, используя результат каждой функции tapply. - person Vixxen81; 03.12.2015
comment
@ Vixxen81 Vixxen81 Я не уверен, что понимаю, разве решение akrun не дает вам желаемых результатов? - person rawr; 03.12.2015