【发布时间】:2020-01-31 13:57:23
【问题描述】:
假设我有这个数据框:
df <- data.frame(
party = c("A", "A", "B", "A", "B"),
votes = c(100, 99, 98, 97, 96),
elected = c(1, 1, 1, 0, 0, 0)
)
party votes elected
1 A 100 1
2 A 99 1
3 B 98 1
4 A 97 0
5 B 96 0
我想计算一个新的变量,这是挑战者候选人的投票,这是第一个非选候选人的投票形成了不同的一方。结果是:
party votes elected votes_challenge
1 A 100 1 96
2 A 99 1 96
3 B 98 1 97
4 A 97 0 NA
5 B 96 0 NA
我已经尝试使用first() 和lag() 使用which() 的条件,但现在没有运气。将不胜感激。
【问题讨论】:
-
你如何识别具有“挑战者候选人”的行的逻辑是什么?
-
可能有一种方法可以从这些数据中复制您想要的结果。但我认为如果你能提供一个比赛ID,可能会使这种方法更具可复制性。例如,如果数据看起来更像这样: “a”,“a”,“b”,“a”,“b”),投票= c(100,99,98,97,96),选举= c(1,1,1,0,0) ) ```通过解决方案,您可能更容易重复使用
-
所有观察都属于同一次选举。挑战者候选人是第一个属于其他党的未经选择的候选人。例如,第一排来自派对A,因此挑战者是来自不同派对(即b)的最多投票的未经用的候选者,其中包括行5。 span>
标签: r dplyr conditional-statements lag summarize