给定一个数据帧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 a
的frequency
,而且在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]