按列在R中具有等效值的子集数据

PoliSci_Fiend

我遇到了一个问题,即如何基于这样的条件来对我的数据进行子集化:在这种情况下,行对列变量的观察等于在同一行中不同列变量的观察。

我在这里使用的示例是选举中的投票

library(dplyr)
library(tidyverse)
library(ggplot2)
library(matrixStats)

Candidate1Votes <- c(45, 18, 34)
Candidate2Votes <- c(43, 52, 33)
Candidate3Votes <- c(12, 30, 33)
Precinct <- c(1, 2, 3)
election.matrix <- cbind(Precinct, Candidate1Votes, Candidate2Votes,
                           Candidate3Votes)

这段代码得到如下矩阵:

Precinct    Candidate1    Candidate2    Candidate3 
1           45             43             12
2           18             52             30
3           34             33             33

我想知道哪个候选人在每个区域中赢得了最多的票数(因此我生成了逐行最大值):

PrecinctWinners <- rowMaxs(election.matrix)

我将其绑定到矩阵,以便现在看起来像这样:

Precinct    Candidate1    Candidate2    Candidate3    PrecinctWinners
1           45             43             12             45
2           18             52             30             52
3           34             33             33             34

我已经将其转换为数据框以供进一步使用:

election.df <- as.data.frame(election.matrix)

这是我的问题。我想对候选人1获得多票的行的数据进行子集化(其中lection.df $ Candidate1 = lection.df $ PrecinctWinners)。如何创建子设置条件,以基于具有相同值的行中的两个不同观察结果选择数据中的行?

参与式

作为Duck评论中的解决方案的替代方案,您可以按以下方式使用dplyr:

library(dplyr)

election.df <- tibble(precint = c(1, 2, 3),
                      Candiate1 = c(45, 18, 34),
                      Candiate2 = c(43, 52, 33),
                      Candiate3 = c(12, 30, 33),
                      PrecintWinners = c(45, 52, 34))

election.df %>%
  filter(Candiate1 == PrecintWinners)


#   precint Candiate1 Candiate2 Candiate3 PrecintWinners
#     <dbl>     <dbl>     <dbl>     <dbl>          <dbl>
# 1       1        45        43        12             45
# 2       3        34        33        33             34

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章