获取每个 class 的前 80%
Get the top 80th percentile of each class
我正在尝试在 R 中编写一个单行代码,用于查找数据帧中每个 class 中的最高记录。我发现 this excellent example 在这种情况下使用 mtcars()
。
我将坚持使用相同的示例,其中我的 class 是 "cyl"
并且我试图获得列 "hp"
.
的最高值
上一个问题的答案给出了 "Top N values" via head/tail 函数。
require(data.table)
d <- data.table(mtcars, key="cyl")
d[, head(.SD, 3), by=cyl]
我正在尝试使用百分比来做完全相同的事情。例如每个 class.
前 80% 的 hp 行(按 hp 从大到小的顺序排列)
有没有办法将百分比透视合并到上面的data.table函数中?
d <- d[order(cyl,-hp)]
d[,.SD[hp >= quantile(hp, 0.8)], by = cyl]
cyl mpg disp hp drat wt qsec vs am gear carb
1: 4 30.4 95.1 113 3.77 1.513 16.90 1 1 5 2
2: 4 21.4 121.0 109 4.11 2.780 18.60 1 1 4 2
3: 4 21.5 120.1 97 3.70 2.465 20.01 1 0 3 1
4: 6 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6
5: 6 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4
6: 6 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4
7: 8 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8
8: 8 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4
9: 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4
10: 8 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4
或使用 dplyr:
library(dplyr)
d %>%
group_by(cyl) %>%
filter(hp >= quantile(hp, 0.8))
我正在尝试在 R 中编写一个单行代码,用于查找数据帧中每个 class 中的最高记录。我发现 this excellent example 在这种情况下使用 mtcars()
。
我将坚持使用相同的示例,其中我的 class 是 "cyl"
并且我试图获得列 "hp"
.
上一个问题的答案给出了 "Top N values" via head/tail 函数。
require(data.table)
d <- data.table(mtcars, key="cyl")
d[, head(.SD, 3), by=cyl]
我正在尝试使用百分比来做完全相同的事情。例如每个 class.
前 80% 的 hp 行(按 hp 从大到小的顺序排列)有没有办法将百分比透视合并到上面的data.table函数中?
d <- d[order(cyl,-hp)]
d[,.SD[hp >= quantile(hp, 0.8)], by = cyl]
cyl mpg disp hp drat wt qsec vs am gear carb
1: 4 30.4 95.1 113 3.77 1.513 16.90 1 1 5 2
2: 4 21.4 121.0 109 4.11 2.780 18.60 1 1 4 2
3: 4 21.5 120.1 97 3.70 2.465 20.01 1 0 3 1
4: 6 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6
5: 6 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4
6: 6 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4
7: 8 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8
8: 8 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4
9: 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4
10: 8 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4
或使用 dplyr:
library(dplyr)
d %>%
group_by(cyl) %>%
filter(hp >= quantile(hp, 0.8))