我正在处理长格式的纵向数据,而我的目的就是我要做的事情。我基本上试图将其转换为面板数据集。想知道我现在拥有的东西:
ID CYRB VAR VALUE
1 1983 ATTEN98 1
1 1983 ATTEN00 1
1 1983 ATTEN02 0
1 1983 ATTEN04 0
2 1979 ATTEN98 1
2 1979 ATTEN00 0
2 1979 ATTEN02 0
2 1979 ATTEN04 0
....
ATTENXX是一个虚拟变量,表示个人是否在面试当年上学。我的计划是只保留与受访者为19或20时相对应的访谈变量。对于1983年出生的人来说,这意味着只保留ATTEN02变量。我一直试图用过滤器(来自dplyr)和if if的组合来做这件事,但我只是无法正确获得语法并且通常最终会出错。
答案 0 :(得分:1)
也许是这样的:
dat %>%
mutate(varnum = as.numeric(substr(VAR,6,7)),
varnum = ifelse(varnum<50, varnum + 2000, varnum + 1900)) %>%
filter((varnum - CYRB) %in% 19:20) %>%
select(-varnum)
ID CYRB VAR VALUE 1 1 1983 ATTEN02 0 2 2 1979 ATTEN98 1