R按组跟踪列中的更改时使用case_
我有一个课程注册数据集,我试图跟踪学生在整个学期中是否放弃、增加或保留课程,并确定他们的注册“路径”。也就是说,我想记录他们是否参加了BIOL101,是否放弃了参加BIOL202。我的数据框如下所示:R按组跟踪列中的更改时使用case_,r,dataframe,if-statement,dplyr,case-when,R,Dataframe,If Statement,Dplyr,Case When,我有一个课程注册数据集,我试图跟踪学生在整个学期中是否放弃、增加或保留课程,并确定他们的注册“路径”。也就是说,我想记录他们是否参加了BIOL101,是否放弃了参加BIOL202。我的数据框如下所示: YRTR TECH_ID COU_ID SUBJ COU_NBR GENDER RACE sub_cou status path 20173 108 217 MUSC 2231 Male White MUSC 2231
YRTR TECH_ID COU_ID SUBJ COU_NBR GENDER RACE sub_cou status path
20173 108 217 MUSC 2231 Male White MUSC 2231 retained
20173 108 218 MUSC 2281 Male White MUSC 2281 retained
20173 8429 574 ECON 2201 Male White ECON 2201 retained
20173 8429 720 BUSN 2120 Male White BUSN 2120 retained
20173 9883 60 ECON 2202 Male White ECON 2202 added
20173 15515 95 PHIL 1102 Female White PHIL 1102 retained
20183 8207 478 ART 1102 Female White ART 1102 retained
20183 8207 1306 ART 1130 Female White ART 1130 added
20183 8207 403 ART 1125 Female White ART 1125 dropped
我试图填写最右边的“路径”栏。这个想法是,如果学生被保留在像第一行一样的课程中,路径将为2231->2231
。具体而言,我关注的是学科内的课程转移。因此,在数据集的末尾,ID8207将有一个路径看起来像1102->1102
,另一个路径看起来像1125->1130
我最初尝试将数据帧拆分为两个数据帧(一个在删除期间之前,一个在删除期间之后),然后像这样重新连接它们:
data5 101
第27届编辑的解决方案
你好,再次@alexvc,开始了。稍微了解一下您的数据。你忘记了一个学生掉1加2的情况,在这种情况下,“路径”变得混乱。我为您提供了一个清晰显示路径的解决方案
库(dplyr)
图书馆(tidyr)
数据5%>%
组员(YRTR、技术ID、科目、状态)%>%
变异=
什么时候(
状态==“已添加”~1,
真~0
),
麻木的=
什么时候(
状态==“已删除”~1,
真~0
),
右侧=
什么时候(
numbadd==1~粘贴(COU_NBR,collapse=“and”)
),
左边=
什么时候(
numbdrop==1~粘贴(COU_NBR,collapse=“and”)
)
) %>%
分组依据(YRTR、技术ID、Subc)%>%
变异(总添加删除=ifelse(状态==“保留”),
0,
总和(numadd)+总和(numdrop))%>%
tidyr::填充(左侧、右侧,.direction=“downpup”)%>%
组员(YRTR、技术ID、科目、状态)%>%
变异(路径)=
什么时候(
状态==“保留”~粘贴(COU_NBR,
库恩布尔,
sep=“->”,
状态==“已添加”&总添加量==1~粘贴(“NA”,
库恩布尔,
sep=“->”,
状态==“已删除”&总添加量==1~粘贴(COU\u NBR,
“不适用”,
sep=“->”,
总添加量>=2~粘贴(左侧,
右边,,
sep=“->”,
对~“有个问题”
)) %>%
安排(YRTR,技术ID)%>%
选择(-COU_ID、-GENDER、-RACE、-rightside、-leftside、-numbadd、-numdrop、-total_add_drop)
#>#A tibble:17 x 7
#>#组:YRTR、技术ID、主题、状态[13]
#>YRTR技术ID主题库NBR子库状态路径
#>
#>1 20173 108麝香2231麝香2231保留2231->2231
#>2 20173 108麝香2281麝香2281保留2281->2281
#>3 20173 3889经济2202经济2202下降2202->NA
#>4 20173 8429经济2201经济2201保留2201->2201
#>5 20173 8429 BUSN 2120 BUSN 2120保留的2120->2120
#>6 20173 9883经济2202经济2202新增NA->2202
#>7 20173 15515菲尔1102菲尔1102保留1102->1102
#>8 20183 8207艺术1102艺术1102保留1102->1102
#>9 20183 8207第1130条第1130条增加了1125->1130和2345条
#>10 20183 8207艺术2345艺术2345增加1125->1130和2345
#>11 20183 8207艺术1125艺术1125下降1125->1130和2345
#>12 20183 8209艺术2345艺术2345新增1125->2345
#>13 20183 8209艺术1125艺术1125下降1125->2345
#>14 20183 8270 PSYC 1001 PSYC 1001丢弃1001和1002->1003和1004
#>15 20183 8270 PSYC 1003 PSYC 1003添加了1001和1002->1003和1004
#>16 20183 8270 PSYC 1002 PSYC 1002丢弃1001和1002->1003和1004
#>17 20183 8270 PSYC 1004 PSYC 1004添加了1001和1002->1003和1004
您的数据与其他测试用例
data5请使用dput
提供数据,谢谢!你好!谢谢你的帮助!我在尝试运行时确实遇到此错误:match.arg(.direction)中的错误:'arg'应该是“down”、“up”中的一个。
Hi,请确保您拥有最新的CRAN版本tidyr
应该是1.1.2。1.0.0中实现了“downup”
data5$status.x=="retained" ~ paste0(data5$COU_NBR.x, "->", data5$COU_NBR.x),
((data5$status.x=="added") & (data5$status.y=="dropped")) ~ paste0(data5$COU_NBR.y, "->", data5$COU_NBR.x),
((data5$status.x=="dropped") & (data5$status.y=="added")) ~ paste0(data5$COU_NBR.x, "->", data5$COU_NBR.y)
)