【发布时间】:2018-09-23 10:29:54
【问题描述】:
Ciao,这是我的复制示例。
a=c(1,2,3,4,5,6)
a1=c(15,17,17,16,14,15)
a2=c(0,0,1,1,1,0)
b=c(1,0,NA,NA,0,NA)
c=c(2010,2010,2010,2010,2010,2010)
d=c(1,1,0,1,0,NA)
e=c(2012,2012,2012,2012,2012,2012)
f=c(1,0,0,0,0,NA)
g=c(2014,2014,2014,2014,2014,2014)
h=c(1,1,0,1,0,NA)
i=c(2010,2012,2014,2012,2014,2014)
mydata = data.frame(a,a1,a2,b,c,d,e,f,g,h,i)
names(mydata) = c("id","age","gender","drop1","year1","drop2","year2","drop3","year3","drop4","year4")
mydata2 <- reshape(mydata, direction = "long", varying = list(c("year1","year2","year3","year4"), c("drop1","drop2","drop3","drop4")),v.names = c("year", "drop"), idvar = "X", timevar = "Year", times = c(1:4))
x1 = mydata2 %>%
group_by(id) %>%
slice(which(drop==1)[1])
x2 = mydata2 %>%
group_by(id) %>%
slice(which(drop==0)[1])
我的数据“mydata2”很高,因此每个 ID 都有很多行。
我想创建新的数据集“x”,这样每个 ID 都有一行,基于它们是否删除。 drop1 drop2 drop3 drop4 中的第一个等于 1,我想取那一年并将其放入变量 dropYEAR。如果没有一个 drop1 drop2 drop3 drop4 等于 1 我想将 year1 year2 year3 year4 中的最后一个数据点放在变量 dropYEAR 中。
最终每个 ID 都应该有 1 行,我想创建 2 个新列:如果 ID 曾经下降,didDROP 等于 1,如果 ID 没有下降,则等于 0。如果 didDROP 等于 1,则 dropYEAR 等于下降年份;如果 ID 从未下降,则等于最后报告的 year1 year2 year3 year4。我尝试在 dplyr 中执行此操作,但这提供了我想要的部分内容,因为它摆脱了等于 0 的 ID 值。
【问题讨论】: