基于其他受访者构建变量';在dplyr中的二元答案

基于其他受访者构建变量';在dplyr中的二元答案,r,dplyr,R,Dplyr,假设我有以下数据集: dat <- read.table(text="Q_ID TeamID Answer Confidence Blur 1 A Yes 88 0 1 A Maybe 99 0 1 B No 20 1 1 B Yes 22 1 1 C Definitely 32 2 1 C Yes 55 1 1 D No 33 5 1 D Maybe 33 9", header=T) 但是,在我的实际数据集中,我有大约100个变量要创建“合作伙伴”版本,我可以将其与以下正则表达式匹配

假设我有以下数据集:

dat <- read.table(text="Q_ID TeamID Answer Confidence Blur
1 A Yes 88 0 
1 A Maybe 99 0
1 B No 20 1
1 B Yes 22 1
1 C Definitely 32 2
1 C Yes 55 1
1 D No 33 5
1 D Maybe 33 9", header=T)
但是,在我的实际数据集中,我有大约100个变量要创建“合作伙伴”版本,我可以将其与以下正则表达式匹配:

index <- grepl('Answer|Confidence|Blur', names(dat)) 

index这会反转每个二元数的答案、置信度和模糊值。请注意,反转是在不是分组变量的所有列上执行的,因此它应该缩放到任意数量的列。按“Q_ID”分组可能没有必要,但您的问题在这一点上有点不清楚

library(tidyverse)
library(magrittr)

dat.partner <- dat %>% 
  group_by(Q_ID, TeamID) %>% 
  mutate_all(rev) %>% 
  ungroup %>% 
  select(-Q_ID, -TeamID) %>% 
  set_colnames(paste0('partner_', colnames(.)))

dat.final <- cbind(dat, dat.partner)

  Q_ID TeamID     Answer Confidence Blur partner_TeamID partner_Answer partner_Confidence partner_Blur
1    1      A        Yes         88    0              A          Maybe                 99            0
2    1      A      Maybe         99    0              A            Yes                 88            0
3    1      B         No         20    1              B            Yes                 22            1
4    1      B        Yes         22    1              B             No                 20            1
5    1      C Definitely         32    2              C            Yes                 55            1
6    1      C        Yes         55    1              C     Definitely                 32            2
7    1      D         No         33    5              D          Maybe                 33            9
8    1      D      Maybe         33    9              D             No                 33            5
库(tidyverse)
图书馆(magrittr)
dat.合伙人%
分组依据(Q\U ID,团队ID)%>%
全部变异(修订版)%>%
解组%>%
选择(-Q_ID,-TeamID)%>%
set_colnames(粘贴0('partner_',colnames())

通过团队ID自动加入的dat.final?这似乎有效!非常感谢。在这种情况下,
rev
做什么?
rev
反转向量中项目的顺序。因为我在dplyr的
mutate\u all
函数中使用它,
mutate
知道通过“TeamID”进行分组,所以在本例中
rev
看到一组2元素向量。
library(tidyverse)
library(magrittr)

dat.partner <- dat %>% 
  group_by(Q_ID, TeamID) %>% 
  mutate_all(rev) %>% 
  ungroup %>% 
  select(-Q_ID, -TeamID) %>% 
  set_colnames(paste0('partner_', colnames(.)))

dat.final <- cbind(dat, dat.partner)

  Q_ID TeamID     Answer Confidence Blur partner_TeamID partner_Answer partner_Confidence partner_Blur
1    1      A        Yes         88    0              A          Maybe                 99            0
2    1      A      Maybe         99    0              A            Yes                 88            0
3    1      B         No         20    1              B            Yes                 22            1
4    1      B        Yes         22    1              B             No                 20            1
5    1      C Definitely         32    2              C            Yes                 55            1
6    1      C        Yes         55    1              C     Definitely                 32            2
7    1      D         No         33    5              D          Maybe                 33            9
8    1      D      Maybe         33    9              D             No                 33            5