R 中平均值列的频率 Table
Frequency Table with Column of Average in R
给定一个数据帧df
,我生成如下:
set.seed(1)
b <- runif(100)
set.seed(1)
a <- sample.int(9, 100, replace = TRUE)
df <- data.frame(a,b)
我形成了如下图的频率table但不满意:
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 14
#9 9 18
我更想要一个 table,它不仅会显示 vector a
的 frequency
,还会显示 frequency of a
以及关联的 averages of vector b
,如下所示在 R
:
# 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 14 0.5478
#9 9 18 0.4389
在 dplyr
中,您可以按 a
分组并计算 b
列的频率和平均值:
library(dplyr)
df %>%
group_by(a) %>%
summarise(Freq = n(),
b = mean(b))
类似地,在 base 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]
如果你想坚持使用基数 R,你可以使用 tapply()
求 a 的 b 的平均值,然后 cbind()
用你的排序 data.frame:
ave_b <- tapply(df$b,df$a,mean)
new_df <- cbind(sortted_a, ave_b)
给定一个数据帧df
,我生成如下:
set.seed(1)
b <- runif(100)
set.seed(1)
a <- sample.int(9, 100, replace = TRUE)
df <- data.frame(a,b)
我形成了如下图的频率table但不满意:
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 14
#9 9 18
我更想要一个 table,它不仅会显示 vector a
的 frequency
,还会显示 frequency of a
以及关联的 averages of vector b
,如下所示在 R
:
# 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 14 0.5478
#9 9 18 0.4389
在 dplyr
中,您可以按 a
分组并计算 b
列的频率和平均值:
library(dplyr)
df %>%
group_by(a) %>%
summarise(Freq = n(),
b = mean(b))
类似地,在 base 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]
如果你想坚持使用基数 R,你可以使用 tapply()
求 a 的 b 的平均值,然后 cbind()
用你的排序 data.frame:
ave_b <- tapply(df$b,df$a,mean)
new_df <- cbind(sortted_a, ave_b)