>

결과가 원하는 것을 찾는 데 어려움을 겪고 있습니다. 데이터를 먼저 와이드 형식으로, 다시 긴 형식으로 재구성하려고합니다. 다음은 매우 간단한 코드입니다.

set.seed(1)
dat <- data.frame(
 id = rep(c("one", "two"), each=4),
 program = rep(1:4, 2),
 days = sample(1:100, 8, replace=FALSE),
 min.date = sample(2000:2015, 8, replace = TRUE),
 max.date = sample(2014:2019, 8, replace = TRUE))

데이트 :

id  program days min.date max.date
one 1       27       2010     2018 
one 2       37       2000     2019 
one 3       57       2003     2016
one 4       89       2002     2018 
two 1       20       2010     2019 
two 2       86       2006     2016 
two 3       97       2012     2018 
two 4       62       2014     2014

이 긴 데이터를 재구성하고 싶었던 방법은 min.date 를 사용하는 것입니다.  그리고 max.date  변수는 각 프로그램에 대한 넓은 형식을 만듭니다. 이것은 나의 예상 와이드 포맷입니다 :

id  program.1.2010 program.1.2011  program.1.2012 program.1.2013 ... 
one             27             27              27             27 ...
two             20             20              20             20 ...

본질적으로, 각 id는 min.date 사이에 각 프로그램의 날짜를 갖습니다.  그리고 max.date  넓은 형식으로. 어떤 아이디어라도 감사하겠습니다.

  • 답변 # 1

    이것이 어떻습니까?

    require(dplyr)
    df1 %>% group_by(id,program) %>% 
    mutate(daterange=paste(seq(min.date,max.date),collapse=",")) %>%
    separate_rows(daterange,sep=",") %>% select(-min.date,-max.date) %>% 
    spread(program,days)
    
    

    와이즈 비즈  각 범위 내에서 모든 연도의 문자열을 쉼표로 구분하여 만듭니다. 와이즈 비즈  그런 다음이 문자열을 가져 와서 쉼표로 나누고 각 값에 대해 새 행을 작성하면 mutate 할 수 있습니다  내가 실제로 원하는 형식이라고 생각하는 것을 만듭니다. 위의 의견을 해석하는 방법에 따라 마지막 단계가 필요하지 않을 수 있습니다. 결과 :

    separate_rows
    
    

    spread

관련 자료

  • 이전 Kafka의 처리량이 많은 이유는 무엇입니까?
  • 다음 java - 코 틀린의 Class clazz