假设我有这个数据集(不是我使用的原始数据)
data <- data.frame(
name=c( rep("A",500), rep("B",500), rep("B",500), rep("C",20), rep('D', 100) ),
value=c( rnorm(500, 10, 5), rnorm(500, 13, 1), rnorm(500, 18, 1), rnorm(20, 25, 4), rnorm(100, 12, 1) )
)
Run Code Online (Sandbox Code Playgroud)
我希望我的代码
我的代码是这样开始的:
data <- data %>%
arrange(name, value) %>%
Run Code Online (Sandbox Code Playgroud)
我读过 top_frac() 但据我所知,它选择了值的前 x%。
提前致谢!
这是一个解决方案。它按组选择前 30% 的值name,然后对每组中选择的行进行计数。
library(dplyr)
data %>%
group_by(name) %>%
arrange(name, value) %>%
top_frac(0.30) %>%
count(name)
#Selecting by value
## A tibble: 4 x 2
## Groups: name [4]
# name n
# <chr> <int>
#1 A 150
#2 B 300
#3 C 6
#4 D 30
Run Code Online (Sandbox Code Playgroud)
这是可以看到的是,这些数字实际上每个组的30%,name与
data %>% count(name) %>% mutate(n = n*0.3)
# name n
#1 A 150
#2 B 300
#3 C 6
#4 D 30
Run Code Online (Sandbox Code Playgroud)
如果你想要前 30% 的值,而不考虑前值来自的组,那么必须将上面的代码更改为以下代码。
data %>%
arrange(name, value) %>%
top_frac(0.30) %>%
count(name)
#Selecting by value
# name n
#1 A 46
#2 B 420
#3 C 20
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |