1

我最近开始使用 doForms(ODK 的衍生产品)收集大量调查数据,在将数据加载到 RI 后,我意识到我必须完全重塑它。因为在我的调查中,我有 9 个问题的循环,这些问题都是结构化的观察,列名是连续的。

对于前。

  colnames(MasterDataframe)
  [1] "Date_Created"        "WaterType"           "Unique_barcode"      "VolumeStart.1."     
  [5] "StartTime.1."        "StopTime.1."         "VolumeEnd.1."        "UserType.1."        
  [9] "NYoungChildren.1."   "NChildren.1."        "NAdults.1."          "EventType.1."       
 [13] "VolumeStart.2."      "StartTime.2."        "StopTime.2."         "VolumeEnd.2."       
 [17] "UserType.2."         "NYoungChildren.2."   "NChildren.2."        "NAdults.2."         
 [21] "EventType.2."        "VolumeStart.3."      "StartTime.3."        "StopTime.3."        
 [25] "VolumeEnd.3."        "UserType.3."         "NYoungChildren.3."   "NChildren.3."       
 [29] "NAdults.3." 

这种情况持续了相当长的一段时间。但是你可以在这里看到模式。

我试图了解如何提取循环数据并首先将其放入它自己的 data.frame 中,用于原始数据帧的 1 行。例如,因为我在一个循环中有 9 个问题,假设我有 20 个循环(MasterDataFrame 中的 180 个列标题),我需要将其浓缩为一个包含 9 个变量和 20 个观察值的数据框。

这里需要注意的是,主数据帧的任何行都包含可变数量的循环。

我不确定如何解决这个问题。朝着正确方向迈出的任何一步都会有所帮助。

因为我通过谷歌文档加载了这个数据框,所以你可以自己查看。

    require(RCurl)        
    myCsv <- getURL('https://docs.google.com/spreadsheet/pub?key=0AhVuJMYFyexYdEpKWkFMby1QMXJhOVVXVXVtekFlbkE&single=true&gid=1&output=csv', cainfo='cacert.pem')
  MasterDataFrame<- (read.csv(textConnection(myCsv),stringsAsFactors = FALSE))

编辑:我认为这会对我缺乏“展示工作”产生一些负面评价,但任何方向都非常感谢。我不确定要问的正确问题是什么,关于“循环”列数据的概念我也找不到太多。

4

2 回答 2

1

mydf 是您的数据框。您可以Reshape为此使用 splitstackshape 包。

library(splitstackshape)

我假设c("Date_Created","WaterType","SS_TippyTap_barcode")为唯一标识符

kk<-Reshape(mydf, id.vars=c("Date_Created","WaterType","SS_TippyTap_barcode"),
        var.stubs = c("VolumeStart", "StartTime", "StopTime","VolumeEnd","UserType","NYoungChildren","NChildren","NAdults","EventType"))
head(kk)
                Date_Created WaterType     SS_TippyTap_barcode                                Form_Record              Mobile_Device Edited_By
1 09/27/2013 15:56:38 GMT+02      Soap  TIPPYTAP_MAC_ID 63EA69 mannaenergy$$09252013072024$$Published&&15 *********/358304046130922        NA
2 09/27/2013 15:36:49 GMT+02     Water  TIPPYTAP_MAC_ID 8DA410 mannaenergy$$09252013072024$$Published&&14 *********/356525042608998        NA
3 09/27/2013 14:55:16 GMT+02      Soap TIPPYTAP_MAC_ID  63F096 mannaenergy$$09252013072024$$Published&&13 *********/358304046208553        NA
4 09/27/2013 14:43:59 GMT+02     Water  TIPPYTAP_MAC_ID 63EB1F mannaenergy$$09252013072024$$Published&&12 *********/358304046206888        NA
5 09/27/2013 14:34:24 GMT+02      Soap  TIPPYTAP_MAC_ID 63EA69 mannaenergy$$09252013072024$$Published&&10 *********/358304046130922        NA
6 09/27/2013 14:16:00 GMT+02      Soap TIPPYTAP_MAC_ID  63F096 mannaenergy$$09252013072024$$Published&&11 *********/358304046208553        NA
  Edit_Date time VolumeStart       StartTime        StopTime VolumeEnd       UserType NYoungChildren NChildren NAdults EventType
1        NA    1        1.70 09:04:41 GMT+02 09:05:19 GMT+02      1.60          Adult             NA        NA       1 DrawWater
2        NA    1        2.31 08:51:22 GMT+02 08:51:54 GMT+02      2.20          Adult             NA        NA       2 DrawWater
3        NA    1        2.30 10:03:48 GMT+02 10:03:51 GMT+02      2.25          Adult             NA        NA       1 DrawWater
4        NA    1        2.20 09:04:55 GMT+02 09:05:49 GMT+02      2.05 Under_5\nAdult              1        NA       1 DrawWater
5        NA    1        1.70 09:04:41 GMT+02 09:05:19 GMT+02      1.60          Adult             NA        NA       1 DrawWater
6        NA    1        2.30 10:03:48 GMT+02 10:03:51 GMT+02      2.25          Adult             NA        NA       1 DrawWater
于 2013-11-01T21:56:34.170 回答
0
longfrm <- rbind( dfrm[, c(1:3, grep("\\.1$", names(dfrm)), 184:187)] ,
       dfrm[, c(1:3, grep("\\.2$", names(dfrm)), 184:187)] ,
       dfrm[, c(1:3, grep("\\.3$", names(dfrm)), 184:187)] )
longfrm$Times <- rep(1:3, each=nrow(dfrm))

在查看问题的严重程度后,我发现您有需要包含的尾随列和 20 次重复,因此可能需要构建一个循环。

于 2013-11-01T22:22:58.240 回答