我以为我确实将宽数据转换为long,并且我一直在使用它一段时间,但是最近我发现出了点问题。显然,代码是错误的,我似乎无法修复它。将复杂的宽数据转换为长R
宽泛的数据是复杂的,因为它包含了有关何人开始他/她的第一份工作,第二份工作等的信息。我想把它变成面板数据。
因此原始数据df
如下所示:
id name gender job1 sjob1 ejob1 job2 sjob2 ejob2 job3 sjob3 ejob3
1 Jane F 100 1990 1992 103 1993 1995 104 1994 1997
2 Tom M 200 1978 1980 400 1981 1985 NA NA NA
作业号码是工作代码,表明某些工作,即管理,销售等
以上是充满了很短的版本我有数据。需要的输出是:
id name gender year job
1 Jane F 1990 100
1 Jane F 1991 100
1 Jane F 1992 100
1 Jane F 1993 103
1 Jane F 1994 104
1 Jane F 1995 104
1 Jane F 1996 104
1 Jane F 1997 104
2 Tom M 1978 200
2 Tom M 1979 200
2 Tom M 1980 200
2 Tom M 1981 400
2 Tom M 1982 400
2 Tom M 1983 400
2 Tom M 1984 400
2 Tom M 1985 400
我对广泛版本总共有大约1600个观察值。 (1600人)。我试过以下,但没有奏效:
df_long <-reshape(df,
varying=c("job1", "job2", "job3"),
v.names="job",
timevar="year",
times=c("sjob1", "sjob2", "sjob3"),
direction = "long")
这实际上成功地在sjob1,sjob2,sjob3(每个任务的起始年)的顺序保留职位代码,但没有保存岁以下sjob1只是记录sjob1代替:
id name gender year job
1 Jane F sjob1 100
1 Jane F sjob2 103
1 Jane F sjob3 104
2 Tom M sjob1 200
2 Tom M sjob2 400
2 Tom M sjob3 NA
以上是我的原始数据的例子,所以我想发表我的原始数据,以及:https://www.dropbox.com/s/ygbkd91ataqkwz5/origin_wide.RData
难道这是HTTP的副本://计算器。com/questions/9004399/reshape-panel-data-wide-format-to-long-format? – krlmlr
你的代码的结果与你期望的结果有什么不同? – krlmlr
@krlmlr我编辑了这个问题!它设法按顺序放置“工作”,但没有吐出代码中创建的“年”变量的年份。 – song0089