繁体   English   中英

你如何重塑数据从宽到长? 目前,我收到一个错误

[英]How do you I reshape data from wide to long? Currently, I am getting an error

我正在处理人口与健康调查 (DHS) 数据。 我想将数据从宽变长。 在我的步骤下面带有代码和错误消息,以便您熟悉。

  1. HNIR62FL_data_1 <- read_sav("~/DHS/HNIR62SV/HNIR62FL_data_1.SAV")

  2. obsHNIR62FL_data_1 <- subset(HNIR62FL_data_1, .is.na(V021) &.is.na(V022) & !is.na(D005))

  3. myvars <- c("CASEID", "V013", "V021", "V022", "V025", "V106", "V137", "V190", "V714", "D005", "D104", "D106", "D107", "D108","v1014", "v1016", "v1023", "v1038", "v1039", "v1045", "v1113", "V701", "v1007_1", "v1007_2", "v1007_3", "v1007_4", "v1008_1", "v1008_2", "v1008_3", "v1008_4", "v1009_1", "v1009_2", "v1009_3", "v1009_4", "v1010_1", "v1010_2", "v1010_3", "v1010_4", "v1020_1", "v1020_2", "v1020_3", "v1020_4", "v1071_1", "v1071_2", "v1071_3", "v1071_4", "v1088_1", "v1088_2", "v1088_3", "v1088_4", "v1096_1", "v1096_2", "v1096_3", "v1096_4", "v1104_1", "v1104_2", "v1104_3", "v1104_4", "v1111_1", "v1111_2", "v1111_3", "v1111_4", "v1112_1", "v1112_2", "v1112_3", "v1112_4")

  4. newobsHNIR62FL_data_1 <- obsHNIR62FL_data_1[myvars]

  5. newobsHNIR62FL_1_long <- reshape(newobsHNIR62FL_data_1, varying = c("v1007_1", "v1007_2", "V1007_3", "v1007_4", "v1008_1", "v1008_2", "v1008_3", "v1008_4", "v1009_1", "v1009_2", "v1009_3", "v1009_4", "v1010_1", "v1010_2", "v1010_3", "v1010_4", "v1020_1", "v1020_2", "v1020_3", "v1020_4", "v1071_1", "v1071_2", "v1071_3", "v1071_4", "v1088_1", "v1088_2", "v1088_3", "v1088_4", "v1096_1", "v1096_2", "v1096_3", "v1096_4", "v1104_1", "v1104_2", "v1104_3", "v1104_4", "v1112_1", "v1112_2", "v1112_3", "v1112_4"), direction = "long", idvar = "CASEID", sep = "_")

错误信息:

  1. reshapeLong(data, idvar = idvar, timevar = timevar, varying = varying

     'varying' arguments must be the same length

什么是代码,所以列具有相同的长度,我可以重塑数据?

谢谢!

多年来,重塑操作不断发展,当前流行的选择是来自“tidyr”package 的pivot_longer() function。 这以更简单的语法具有 reshape 的所有功能。

#Sample data
newobsHNIR62FL_data_1<-data.frame(CASEID=1:10, v1007_1=1:10, v1007_2=11:20, V1007_3=21:30)

#Pivot longer
tidyr::pivot_longer(newobsHNIR62FL_data_1, 
                    cols=starts_with(c("V", "v")),  
                    names_to = c("name", "id"), 
                    values_to="value", names_sep="_")


# A tibble: 30 x 4
   CASEID name  id    value
    <int> <chr> <chr> <int>
 1      1 v1007 1         1
 2      1 v1007 2        11
 3      1 V1007 3        21
 4      2 v1007 1         2
 5      2 v1007 2        12
 6      2 V1007 3        22
 7      3 v1007 1         3
 8      3 v1007 2        13
 9      3 V1007 3        23
10      4 v1007 1         4
# … with 20 more rows

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM