R.在R中查找按子集分组的汇总统计信息

R.在R中查找按子集分组的汇总统计信息,r,R,我在R中有一个巨大的数据集。每个观测值都有一个分类标签,在这个例子中有一个数值,一个质量 我正在寻找按每个子集标签分组的质量值的汇总统计数据(平均值、中位数、模式) 我完全被难倒了,所以任何帮助都将不胜感激 数据的一个片段是 Order_or_higher First_appearance_mya Last_appearance_mya Mass_kg Rodentia -13.9 -11.3 0.006665867 Rodentia -11.8 -7.5

我在R中有一个巨大的数据集。每个观测值都有一个分类标签,在这个例子中有一个数值,一个质量

我正在寻找按每个子集标签分组的质量值的汇总统计数据(平均值、中位数、模式)

我完全被难倒了,所以任何帮助都将不胜感激

数据的一个片段是

Order_or_higher First_appearance_mya Last_appearance_mya    Mass_kg

Rodentia    -13.9   -11.3   0.006665867
Rodentia    -11.8   -7.5    0.005259311
Rodentia    -14.4   -14.4   0.036379302
Rodentia    -16.7   -13.7   0.056373546
Rodentia    -14.1   -14.1   0.008149854
Rodentia    -28.4   -20.3   0.009393331
Rodentia    -2.4    -2.4    0.02126367
Rodentia    -0.9    0   0.014909521
Rodentia    -3.8    -3.7    0.027798999
Rodentia    -2.8    -0.5    0.01889694
Rodentia    -1.6    -1.6    0.017115766
Carnivora   -5.8    -5.7    63.51300709
Carnivora   -17.4   -14.5   281.8132792
Carnivora   -20.1   -15.5   130.4832311

dplyr包有更多的分类值,具有这些功能,是为这些任务而设计的

假设
d
是您的数据集

d %>%
group_by(<subset>) %>%
summarise(mean = mean(<mass>),
          median = median(<mass>),
          mode = ModeFunction(<mass>))
d%>%
分组依据()%>%
总结(平均值=平均值(),
中位数=中位数(),
mode=ModeFunction())

您可以定义一个函数来声明
ModeFunction
。hpesoj626的函数运行良好且简单。

有很多方法,您可以在R中实现这一点。下面是使用
tidyverse
的一种方法。但首先,请注意R中的函数
mode()
不会返回模式估计值。要了解有关
mode()
功能的更多信息,请在控制台中键入
?mode
。所以我们必须创建一个返回模式的函数。显然,我们可以从
table()
函数开始,因为它返回
table(x)
x
的频率分布


模式除非您提供一个明确的dataDone示例,添加dataWhat are%%>%意味着什么?@DanielV,函数
模式
不会返回统计模式估计值。:)@需要帮助%>%函数的人被称为“管道函数”。它将前一个函数的结果作为其第一个参数传递给下一个函数。
Mode <- function(x) {
  uniqx <- unique(x)
  uniqx[which.max(table(x))]
}
tt <- "Rodentia -13.9 -11.3 0.006665867 
Rodentia -11.8 -7.5 0.005259311 
Rodentia -14.4 -14.4 0.036379302 
Rodentia -16.7 -13.7 0.056373546 
Rodentia -14.1 -14.1 0.008149854 
Rodentia -28.4 -20.3 0.009393331 
Rodentia -2.4 -2.4 0.02126367 
Rodentia -0.9 0 0.014909521 
Rodentia -3.8 -3.7 0.027798999 
Rodentia -2.8 -0.5 0.01889694 
Rodentia -1.6 -1.6 0.017115766 
Carnivora -5.8 -5.7 63.51300709 
Carnivora -17.4 -14.5 281.8132792 
Carnivora -20.1 -15.5 130.4832311"

df <- read.table(text = tt, header = F)


library(tidyverse)
df %>% 
  group_by(V1) %>%
  summarise_at(vars(V2:V4), funs(mean, median, Mode))
#   V1      V2_mean V3_mean V4_mean V2_median V3_median V4_median V2_Mode V3_Mode V4_Mode
#   <chr>     <dbl>   <dbl>   <dbl>     <dbl>     <dbl>     <dbl>   <dbl>   <dbl>   <dbl>
# 1 Carniv…   -14.4  -11.9  1.59e+2     -17.4    -14.5   130.       -5.80   -5.70 6.35e+1
# 2 Rodent…   -10.1   -8.14 2.02e-2     -11.8     -7.50    0.0171  -13.9   -11.3  6.67e-3