如何找到R中因子水平的中位数?

当我们有序数据或连续数据有离群值时,计算中心趋势中位数的第二个最常用的度量,如果有因子数据,那么我们可能需要找到水平的中位数以将它们相互比较。最简单的方法是使用汇总函数查找汇总。

示例

请看以下包含一个因子列的数据框-

set.seed(191)
x1<-as.factor(sample(LETTERS[1:3],20,replace=TRUE))
x2<-sample(1:10,20,replace=TRUE)
df1<-data.frame(x1,x2)
df1

输出结果

  x1 x2
1  B 6
2  C 5
3  B 4
4  C 8
5  B 5
6  B 5
7  A 4
8  C 8
9  C 3
10 C 4
11 B 9
12 A 10
13 C 6
14 C 1
15 A 10
16 A 3
17 A 5
18 C 7
19 B 3
20 C 1

示例

> str(df1)

输出结果

'data.frame': 20 obs. of 2 variables:
$ x1: Factor w/ 3 levels "A","B","C": 2 3 2 3 2 2 1 3 3 3 ...
$ x2: int 6 5 4 8 5 5 4 8 3 4 ...

在x1中找到类别的x2中位数-

示例

aggregate(x2~x1,data=df1,summary)

输出结果

  x1 x2.Min. x2.1st Qu.x2.Median x2.Mean x2.3rd Qu.   x2.Max.
1 A 3.000000 4.000000 5.000000   6.400000 10.000000 10.000000
2 B 3.000000 4.250000 5.000000   5.333333 5.750000  9.000000
3 C 1.000000 3.000000 5.000000   4.777778 7.000000  8.000000

让我们看另一个例子-

示例

Temperature<-as.factor(sample(c("Cold","Hot"),20,replace=TRUE))
Sales<-sample(50000:80000,20)
df2<-data.frame(Temperature,Sales)
df2

输出结果

   Temperature Sales
1    Cold    72210
2    Cold    56758
3    Hot     53809
4    Hot     79977
5    Hot     77135
6    Cold    56932
7    Hot     51104
8    Cold    67742
9    Hot     75402
10   Hot     62546
11   Cold    68520
12   Hot     54575
13   Cold    51591
14   Hot    55232
15   Hot    77742
16   Hot    62507
17   Hot    62156
18   Cold   73853
19   Cold   69807
20   Hot    53930

在温度类别中找到销售的中位数-

示例

aggregate(Sales~Temperature,data=df2,summary)

输出结果

 Temperature Sales.Min. Sales.1st Qu. Sales.Median Sales.Mean Sales.3rd Qu.
1    Cold    51591.00    56888.50    68131.00       64676.62    70407.75
2    Hot     51104.00    54413.75    62331.50       63842.92    75835.25
 Sales.Max.
1 73853.00
2 79977.00