使用 group_by() 根据条件折叠 R 中的数据集

Ste*_*vis 2 if-statement r conditional-statements mutate

我正在尝试根据另一个数据集的条件和分组折叠数据集。我当前的数据框看起来像这样

对于每个“国会”中的每个“RollNo”,我想要一个新变量,指示同一州的两名参议员是否一起投票(1,0)并且属于同一政党(1,0)

国会 卷号 状态 投票 派对
106 杰伊 1 方舟 1 代表
106 玛丽 1 方舟 1 民主党
106 账单 2 2 民主党
106 凯文 2 1 民主党
108 起诉 1 矿石 2 代表
108 莎莉 1 矿石 2 代表
108 丽莎 3 斯达克 1 代表
108 一分钱 3 斯达克 2 代表
109 杰伊 1 密歇根州 1 民主党
109 玛丽 1 密歇根州 9 代表
109 鲁迪 5 卡尔 1 民主党
109 奈尔斯 5 卡尔 1 民主党

新的数据框应如下所示:

国会 卷号 状态 配对投票 配对派对
106 1 方舟 1 0
106 2 0 1
108 1 矿石 1 1
108 3 斯达克 0 1
109 1 密歇根州 0 0
109 5 卡尔 1 1

我已经尝试过下面的代码,调整了几次。我的数据集返回相同的观察结果,并且两个新列为我的新变量的空向量。

library(dplyr)
dataframe['Pair_Vote'] <- NA
dataframe['Pair_Party'] <- NA
newdata <- dataframe %>% group_by(congress, RollNo, state) %>% 
  mutate(Pair_Vote - case_when(any(Vote == Vote) ~ 1, FALSE ~ 0))
Run Code Online (Sandbox Code Playgroud)

我不知所措。

Gre*_*gor 5

mutate当您想要按原样向数据框添加列时使用,summarize当您希望结果每组一行时使用。您的输出每组一行,因此我们将使用summarize.

vote == vote没有多大用处,让我们用来n_distinct计算不同的值。

dataframe %>% 
  group_by(congress, RollNo, state) %>% 
  summarize(
    Pair_Vote = ifelse(n_distinct(Vote) == 1, 1, 0),
    Pair_Party = ifelse(n_distinct(Party) == 1, 1, 0)
  )
Run Code Online (Sandbox Code Playgroud)