在R

时间:2016-06-09 15:33:12

标签: r sapply tapply

在研究中,我们经常需要做一个汇总表。我想在R中使用tapply创建一个表。唯一的问题是我有40个变量,我想基本上对所有40个变量执行相同的操作。以下是数据的示例

Age Wt  Ht  Type
79  134 66  C
67  199 64  C
39  135 78  T
92  149 61  C
33  138 75  T
68  139 71  C
95  198 62  T
65  132 65  T
56  138 81  C
71  193 78  T

基本上我想让它产生 Type 给出的所有变量的均值。它应该看起来像

      C     T
Age 72.4   60.6
Wt  151.8  159.2
Ht  68.6   71.6

我尝试使用

sapply(df, tapply(df, df$Type, mean)) 

但收到了错误。

任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:2)

尝试:

> sapply(df[1:3], tapply, df$Type, mean)
   Age    Wt   Ht
C 72.4 151.8 68.6
T 60.6 159.2 71.6

或者您可以使用colMeans

> sapply(split(df[1:3], df$Type), colMeans)
        C     T
Age  72.4  60.6
Wt  151.8 159.2
Ht   68.6  71.6

答案 1 :(得分:1)

您可以使用aggregate

res <- aggregate(DF[,names(DF) != 'Type'],list(DF$Type),mean)
> res
  Group.1  Age    Wt   Ht
1       C 72.4 151.8 68.6
2       T 60.6 159.2 71.6

然后转置它:

m <- t(res[-1]) # convert the data.frame (excluding first col) in a matrix and traspose it
colnames(m) <- res[[1]] # set colnames of the matrix taking them from the data.frame 1st col
> m
        C     T
Age  72.4  60.6
Wt  151.8 159.2
Ht   68.6  71.6