Комплексная реструктуризация в R: строки, числа и даты - PullRequest
0 голосов
/ 28 августа 2018

У меня есть широкий набор данных, в котором каждая строка (отдельное лицо) предоставляет от до три наблюдения для трех разных дат. Каждое наблюдение состоит из даты, описания и количества минут. Отдельные лица могут предоставить столько наблюдений, сколько пожелают, и могут появиться в нескольких строках с дополнительными наблюдениями.

Тестовые данные здесь:

library(RCurl)
fwt <-     getURL("https://raw.githubusercontent.com/bac3917/Cauldron/master/fwt.csv")
fwt<-read.csv(text=fwt)

Преобразование столбцов в правильный формат:

library(lubridate)
fwt$date1<-as.Date(fwt$date1, format='%m/%d/%Y')
fwt$date2<-as.Date(fwt$date2, format='%m/%d/%Y')
fwt$date3<-as.Date(fwt$date3, format='%m/%d/%Y')
# condense dataset; 3 sets of columns into 1
cols <- names(fwt) %in%     c("naecy1_2","naecy1_1","naecy1_3","naecy1_4","naecy1_5","naecy1_6",
          "naecy2_2","naecy2_1","naecy2_3","naecy2_4","naecy2_5","naecy2_6",
          "naecy3_2","naecy3_1","naecy3_3","naecy3_4","naecy3_5","naecy3_6")


fwt[cols]<-lapply(fwt[cols], as.numeric) #convert to numeric all
fwt[is.na(cols)]<-0

По сути, есть три набора даты / описания / минут, которые необходимо сложить в длинный формат. Я бы хотел, чтобы при реструктуризации данные выглядели так:

Name   Date  NAECY1  NAECY2  NAECY3  NAECY4  NAECY5  NAECY6

Я пробовал reshape2 и tidyr, но не могу понять это. Идеи, кто-нибудь?

Спасибо ...

1 Ответ

0 голосов
/ 28 августа 2018

Вот быстрое решение:

cols <- c("name", "date%d","descr%d", "naecy%d_1", "naecy%d_2", "naecy%d_3", "naecy%d_4", "naecy%d_5", "naecy%d_6")
cols_renamed <- c("Name   Date Descr  NAECY1  NAECY2  NAECY3  NAECY4  NAECY5  NAECY6") %>% strsplit("\\W+") %>% unlist

new_fwt <- lapply(1:3, function(i) {
  df <- fwt[,sprintf(cols, i)]
  colnames(df) <- cols_renamed
  df
}) %>% do.call(rbind, .)
...