我正在将纵向数据从宽格式转换为长格式。这就是我了解"后台"发生的事情以及是否真的可能
。df1 是我之前full_joined的 4 个数据波的组合。我有 4 个带有标识符 pidp 的波浪和三个固定变量,我在第一波中插入了这些变量,然后在此之后,第 1 波中有五个时变变量。
在波 2、波 3 和波 4 中,有一个称为 jwbs1_2 的变量,它只出现在波 2、波 3 和波 4 处。
因此,第 1 波中有五个时变变量,但在波浪 2、3 和 4 中有六个时变变量,如帖子底部所示。
I got the error message
Error in reshapeLong(data, idvar = idvar, timevar = timevar, varying = varying, :
'varying' arguments must be the same length
我想知道是否可以在不同的波中具有不同数量的时变变量并以长格式使用它们?有没有办法绕过它?
为了说明目的,我插入了下面的变量和我正在使用的代码
$ pidp
$ sex
$ edtype
$ jbsat_1
$ sclfsato_1
$ jbsat_1
$ sf12mcs_1
$ scghq1_1
$ jbsat_2
$ sclfsato_2
$ jbsat_2
$ sf12mcs_2
$ scghq1_2
$jwbs1_2
df2 <- reshape(
data = df1,
varying = 4:length(df1),
timevar = "wave",
sep = "_",
idvar = "pidp",
direction = "long"
)
对于宽格式的不平衡数据,您可以将缺少的变量jwbs1_1
追加到数据框并重试,也可以使用tidyr包中的 pivot_longer 函数。
基数 R(在波 1 中附加缺失变量后重塑(:
df1_bal <- data.frame(append(df1, list(jwbs1_1=NA), after=8))
reshape(df1_bal, ...)
整洁(pivot_longer(
pivot_longer(df1, cols=-c(pidp, sex, edtype),
names_to=c(".value","wave"), names_pattern="(.*)_(\d)")