对于示例数据:
set.seed(2222)
example_data <- data.frame(col1 = 1:15,
col2 = 16:30,
group = sample(1:3, 15, replace = TRUE))
col1 col2 group
1 1 16 2
2 2 17 1
3 3 18 3
4 4 19 2
5 5 20 3
6 6 21 1
7 7 22 3
8 8 23 1
9 9 24 3
10 10 25 1
11 11 26 2
12 12 27 2
13 13 28 2
14 14 29 3
15 15 30 3
我想找到记录数最多的前n个组。
比方说,我想获得记录数最多的前2个组。在数据中,这将是第3组和第2组:
example_data %>%
group_by(group) %>%
summarise(n = n())
# A tibble: 3 x 2
group n
<int> <int>
1 1 4
2 2 5
3 3 6
预期输出为:
col1 col2 group
1 1 16 2
2 3 18 3
3 4 19 2
4 5 20 3
5 7 22 3
6 9 24 3
7 11 26 2
8 12 27 2
9 13 28 2
10 14 29 3
11 15 30 3
答案 0 :(得分:4)
我们可以使用table
来计算每个group
的频率,sort
以decreasing
的顺序,将前2个条目和filter
分别分组。
library(dplyr)
example_data %>%
filter(group %in% names(sort(table(group), decreasing = TRUE)[1:2]))
# col1 col2 group
#1 1 16 2
#2 3 18 3
#3 4 19 2
#4 5 20 3
#5 7 22 3
#6 9 24 3
#7 11 26 2
#8 12 27 2
#9 13 28 2
#10 14 29 3
#11 15 30 3
您也可以直接在基本R subset
subset(example_data, group %in% names(sort(table(group), decreasing = TRUE)[1:2]))
答案 1 :(得分:3)
我们可以使用tidyverse
方法。创建一个频率列,其中add_count
,arrange
,该列的filter
和最后两个unique
“ group”的值所在的行的行library(dplyr)
example_data %>%
add_count(group) %>%
arrange(n) %>%
filter(group %in% tail(unique(group), 2)) %>%
select(-n)
# A tibble: 11 x 3
# col1 col2 group
# <int> <int> <int>
# 1 1 16 2
# 2 4 19 2
# 3 11 26 2
# 4 12 27 2
# 5 13 28 2
# 6 3 18 3
# 7 5 20 3
# 8 7 22 3
# 9 9 24 3
#10 14 29 3
#11 15 30 3
data.table
或使用library(data.table)
setDT(example_data)[group %in% example_data[, .N, group][order(-N), head(group, 2)]]
{{1}}
答案 2 :(得分:2)
使用$builder->add('list',
CollectionType::class,
[
'required' => false,
'allow_add' => true,
'error_bubbling' => true,
])
->add('price',
IntegerType::class,
[
'required' => false,
'error_bubbling' => true,
'min' => 50
]);
,您还可以执行以下操作:
dplyr
或者:
example_data %>%
add_count(group) %>%
filter(dense_rank(desc(n)) <= 2) %>%
select(-n)
col1 col2 group
<int> <int> <int>
1 1 16 2
2 3 18 3
3 4 19 2
4 5 20 3
5 7 22 3
6 9 24 3
7 11 26 2
8 12 27 2
9 13 28 2
10 14 29 3
11 15 30 3
答案 3 :(得分:1)
另一种dplyr
方法可能是:
example_data %>%
group_by(group) %>%
count() %>%
ungroup() %>%
top_n(n = 2, wt = n) %>%
select(-n) %>%
inner_join(example_data)
答案 4 :(得分:0)
另一个解决方案(类似于@OTStats):
l1=Input(shape=(41,4))
x=Conv1D(64,(4))(l1)
x=GlobalMaxPooling1D()(x)
x=Dense(1)(x)
model=Model(l1,x)
model.compile('rmsprop','binary_crossentropy',metrics=['acc'])
model.fit(X,y,32,10)