频率表,平均值列为R



给定一个数据帧df,我生成如下:

set.seed(1)
b <- runif(100)
set.seed(1)
a <- sample.int(9, 100, replace = TRUE)
df <- data.frame(a,b)

我形成了如下所示的频率表,但并不满意:

sortted_a <- data.frame(table(df$a))
sortted_a
#  Var1 Freq
#1    1   14
#2    2    8
#3    3   10
#4    4    9
#5    5   11
#6    6   11
#7    7    5
$8    8   14
#9    9   18

我想要一个不仅显示vector afrequency,而且在R中显示frequency of a和相关的averages of vector b的表:

#  Var1 Freq   Ave_b
#1    1   14   0.6750
#2    2    8   0.0027
#3    3   10   0.8298
#4    4    9   0.1873
#5    5   11   0.3874
#6    6   11   0.7632
#7    7    5   0.5812
$8    8   14   0.5478
#9    9   18   0.4389

如果你想坚持使用基数R,你可以使用tapply()用a求b的平均值,然后用排序后的数据求cbind()。帧:

ave_b <- tapply(df$b,df$a,mean)
new_df <- cbind(sortted_a, ave_b)

dplyr中,您可以按a进行分组,并计算b列的频率和平均值:

library(dplyr)
df %>%
group_by(a) %>%
summarise(Freq = n(), 
b = mean(b))

类似地,在碱基R和data.table:中

aggregate(b~a, df, function(x) c(Freq = length(x), b = mean(x)))
library(data.table)
setDT(df)[, .(Freq = .N, b = mean(b)), a]

最新更新