r语言 - "变化"参数的长度必须相同



我有一个宽格式的纵向数据,我正试图将其转换为长格式:

#I have a wide data which look like this:
dat_wide <- read.table(text="
cid dyad f1 f2  op2 ed1 junk 
1   2    0  0   4   5   0.876
1   5    0  1   4   4   0.765
", header=TRUE)
#I want to convert it to long like this:
dat_long <- read.table(text="
cid dyad f op  ed junk  Visit
1   2    0 NA  5  0.876 1
1   2    0 4   NA 0.876 2
1   5    0 NA  4  0.765 1
1   5    1 4   NA 0.765 2 
", header=TRUE)
#R code I was trying:
dat_l2 = reshape(dat_wide,idvar='cid',  varying=list(c('f1','f2'), 'op2','ed1'),
#timevar='Visit',
times=c(1,2),
v.names=c('f','op','ed'),
direction='long') 
#gives error:Error in reshape(merge_wide1, idvar = "cid", varying = c("f1",  : length of 'v.names' does not evenly divide length of 'varying'

它类似于将数据从宽转换为长(使用多列(

我的数据不同之处在于:我有一些变量只记录了较少的时间点。例如,变量"f"从时间1和时间2都被记录;时间2,但变量"op"仅被记录用于时间2(即op2(&变量"ed"只记录了时间1(即ed1(头(数据(

您可以从tidyr:使用pivot_longer

tidyr::pivot_longer(dat_wide, 
cols = f1:ed1, 
names_to = c('.value', 'Visit'), 
names_pattern = '(.*)(\d+)')
#    cid  dyad  junk Visit     f    op    ed
#  <int> <int> <dbl> <chr> <int> <int> <int>
#1     1     2 0.876 1         0    NA     5
#2     1     2 0.876 2         0     4    NA
#3     1     5 0.765 1         0    NA     4
#4     1     5 0.765 2         1     4    NA

最新更新