在 R 中使用 `apply` 的变体
Using variations of `apply` in R
很多时候在研究中我们必须做一个总结table。我想在 R 中使用 tapply
创建一个 table。唯一的问题是我有 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))
但出现错误。
任何指导将不胜感激。
你可以使用 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
尝试:
> 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
很多时候在研究中我们必须做一个总结table。我想在 R 中使用 tapply
创建一个 table。唯一的问题是我有 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))
但出现错误。
任何指导将不胜感激。
你可以使用 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
尝试:
> 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