我有一个数据框,其中包含有关市政当局地方选举的信息,我想在我的数据集中仅保留与市政当局投票最多的两名候选人有关的信息。
我的数据框是使用以下信息创建的:
Theorem add_n_injective : forall n m p, n + m = n + p -> m = p.
Proof.
intros. induction n.
- exact H.
- apply IHn. (* goal: n + m = n + p *)
simpl in H. (* H: S (n + m) = S (n + p) *)
congruence.
Qed.
看起来像这样:
Candidates <- c('Liza S.', 'John R.', 'Peter F.', 'Ignacio R.', 'Hanna F.', 'Anthony E.', 'Andrew W.')`
Municipality <- ('A', 'A', 'A', 'B', 'B', 'B', 'B')
Votes <- c(100, 120, 140, 110, 335, 225, 400)
data <- data.frame(Candidates, Municipality, Votes)
我希望我的数据框看起来像这样:
Candidates Municipality Votes
Liza S. A 100
John R. A 120
Peter F. A 140
Ignacio R. B 110
Hanna F. B 335
Anthony E. B 225
Andrew W. B 400
关于如何实现此目标的任何想法?
答案 0 :(得分:3)
您可以为此使用dplyr
软件包:
library(dplyr)
data %>%
group_by(Municipality) %>%
top_n(n = 2, wt = Votes)
# A tibble: 4 x 3
# Groups: Municipality [2]
Candidates Municipality Votes
<fct> <fct> <dbl>
1 John R. A 120
2 Peter F. A 140
3 Hanna F. B 335
4 Andrew W. B 400
答案 1 :(得分:2)
您可以根据特定于自治市(ave()
的{{1}})来rev
子集。
order()
数据:
dat[ave(dat$Votes, dat$Municipality, FUN=function(x) rev(order(x))) <= 2, ]
# Candidates Municipality Votes
# 2 John R. A 120
# 3 Peter F. A 140
# 5 Hanna F. B 335
# 7 Andrew W. B 400
答案 2 :(得分:1)
在基数R中:
do.call("rbind",
lapply(split.data.frame(data, Municipality),
function(x) x[rev(order(x$Votes))[1:2],]))
# Candidates Municipality Votes
# A.3 Peter F. A 140
# A.2 John R. A 120
# B.7 Andrew W. B 400
# B.5 Hanna F. B 335
答案 3 :(得分:1)
这是使用dplyr软件包的一种方式;
library(dplyr)
# Creating data
Candidates <- c('Liza S.', 'John R.', 'Peter F.', 'Ignacio R.', 'Hanna F.', 'Anthony E.', 'Andrew W.')
Municipality <- c('A', 'A', 'A', 'B', 'B', 'B', 'B')
Votes <- c(100, 120, 140, 110, 335, 225, 400)
data <- data.frame(Candidates, Municipality, Votes)
data %>%
# Grouping by Municipality
group_by(Municipality) %>%
# Sorting the data desc by Votes
arrange(desc(Votes)) %>%
# Getting first and second highest values for each group
slice(1:2) %>%
ungroup() %>%
# # A tibble: 4 x 3
# # Groups: Municipality [2]
# Candidates Municipality Votes
# <fct> <fct> <dbl>
# Peter F. A 140
# John R. A 120
# Andrew W. B 400
# Hanna F. B 335