Anu*_*hit 1 sorting r dataframe
我有一个名为df的数据帧,有三列可以说,
Region ID Salary
1 A1 100
1 A2 1001
1 A3 2000
1 A4 2431
1 A5 1001
..............
..............
2 A6 1002
2 A7 1002
2 A8 1002
3 A9 3001
3 A10 3001
3 A11 4001
Run Code Online (Sandbox Code Playgroud)
现在我想通过Region的出现来排序列Salary,即使用频率表或其他东西,获取每个区域出现的概率并对它们进行排序.请假设数据集足够大(1000行)
PS:任何人都可以提出一个很好的方法来做一些.请在答案中使用列名,因为实际表中间有一些列
提前致谢
**EDIT 1**
Run Code Online (Sandbox Code Playgroud)
我想我不够清楚,感谢所有回复的人,我真诚地为不清楚而道歉:
使用当前数据集,我们需要创建一个频率表说:
Region Salary(bin) Count
1 1K 6
1 5K 3
1 2K 2
1 15K 2
1 0.5K 2
1 24K 1
1 0K 0
Run Code Online (Sandbox Code Playgroud)
使用这个我们可以分类在我们的数据框df中添加一个名为bin的桶(直方图中的桶)
Region ID Salary (bin) Count
1 A1 100 1K 6
1 A2 1001 2K 2
1 A3 2000 2K 2
1 A4 2431 5K 3
Run Code Online (Sandbox Code Playgroud)
..........................所以...............
我们可以使用以下方法做到:
df$bin <- cut(df$salary, breaks=hist(df$salary)$breaks)
Run Code Online (Sandbox Code Playgroud)
按地区和计数和薪资排序后,我们得到:
Region ID Salary (bin) Count
1 A1 100 1K 6
1 A4 2431 5K 3
1 A3 2000 2K 2
1 A2 1001 2K 2
Run Code Online (Sandbox Code Playgroud)
如您所见,我们需要为每个区域创建频率表并进行排序.我使用Tableau完成了上述操作,但我想在R中自动执行此操作
希望我很清楚
一种可能的方法是使用data.table
添加freq
列,然后相应地对数据进行排序:
library(data.table)
setDT(df)[,freq := .N, by = c("Region","Salary")]
# Sort
df[order(freq, decreasing = T),]
# As a oneliner (thx @Jaap)
setDT(df)[, freq := .N, by = .(Region,Salary)][order(-freq)]
Run Code Online (Sandbox Code Playgroud)
基地R:
df <- transform(df, freq= ave(seq(nrow(df)), Salary, FUN=length))
df[order(-df$freq), ]
Run Code Online (Sandbox Code Playgroud)
输出:
Region ID Salary freq
6 2 A6 1002 3
7 2 A7 1002 3
8 2 A8 1002 3
2 1 A2 1001 2
5 1 A5 1001 2
9 3 A9 3001 2
10 3 A10 3001 2
1 1 A1 100 1
3 1 A3 2000 1
4 1 A4 2431 1
11 3 A11 4001 1
Run Code Online (Sandbox Code Playgroud)