2016-06-09 31 views
0

在研究中,我们经常需要做一个总结表。我想在R中使用tapply创建一个表。唯一的问题是我有40个变量,我想基本上对所有40个变量执行相同的操作。这里是在R中使用`apply`的变体

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 

基本上我想获得它制作给出的类型的所有变量的装置中的数据的一个例子。它看起来应该

 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

尝试:

> 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 
+0

现在我将能够转置的第一个结果,所以我有Type的值在顶部,就像它在第二个例子? – akash87

+0

如果您想要转置,请将所有内容放入't(...)' –

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 
+0

现在我将能够转置第一个结果,所以我有类似的值在顶部,就像它在第二个例子中一样? – akash87

+0

@ akash87:很简单,检查我的编辑;) – digEmAll

相关问题