2017-04-06 14 views
8

मेरे डेटा इस तरह दिखता है:

enter image description hereफैले

मैं:

enter image description here

मैं इसे इस तरह देखो बनाने के लिए कोशिश कर रहा हूँ %>% - चेनिंग का उपयोग करके tidyverse में ऐसा करना चाहते हैं।

df <- 
structure(list(id = c(2L, 2L, 4L, 5L, 5L, 5L, 5L), start_end = structure(c(2L, 
1L, 2L, 2L, 1L, 2L, 1L), .Label = c("end", "start"), class = "factor"), 
    date = structure(c(6L, 7L, 3L, 8L, 9L, 10L, 11L), .Label = c("1979-01-03", 
    "1979-06-21", "1979-07-18", "1989-09-12", "1991-01-04", "1994-05-01", 
    "1996-11-04", "2005-02-01", "2009-09-17", "2010-10-01", "2012-10-06" 
    ), class = "factor")), .Names = c("id", "start_end", "date" 
), row.names = c(3L, 4L, 7L, 8L, 9L, 10L, 11L), class = "data.frame") 

मैं क्या कोशिश की है:

Using spread with duplicate identifiers for rows (क्योंकि वे संक्षेप में प्रस्तुत)

R: spread function on data frame with duplicates (क्योंकि वे मानों को एक साथ पेस्ट):

data.table::dcast(df, formula = id ~ start_end, value.var = "date", drop = FALSE) # does not work because it summarises the data 

tidyr::spread(df, start_end, date) # does not work because of duplicate values 


df$id2 <- 1:nrow(df) 
tidyr::spread(df, start_end, date) # does not work because the dataset now has too many rows. 

ये सवाल मेरे सवाल का जवाब नहीं है

Reshaping data in R with "login" "logout" times (क्योंकि विशेष रूप से टिडवर्स और चेनिंग का उपयोग करके/उत्तर देने के लिए नहीं कहा जाता है)

+0

'as.data.table (DF) के लिए 'लंबी' से spread बनाने [, .id: = अनुक्रम (एन),। (आईडी, start_end)] [, dcast (.SD, .id + id ~ start_end, value.var = "date")] '? – A5C1D2H2I1M1N2O1R2T1

+0

'reshape2' और' dplyr' का उपयोग करके: 'df%>% group_by (id, start_end)%>% व्यवस्था (दिनांक)%>% उत्परिवर्तन (अनुक्रम = 1: एन())%>% dcast (id + अनुक्रम ~ start_end, value = "date") '। – eipi10

उत्तर

10

हम tidyverse का उपयोग कर सकते हैं। 'Start_end', 'आईडी' द्वारा समूहीकरण के बाद, एक दृश्य स्तंभ 'इंडस्ट्रीज़', फिर 'विस्तृत' प्रारूप

library(dplyr) 
library(tidyr) 
df %>% 
    group_by(start_end, id) %>% 
    mutate(ind = row_number()) %>% 
    spread(start_end, date) %>% 
    select(start, end) 
#  id  start  end 
#* <int>  <fctr>  <fctr> 
#1  2 1994-05-01 1996-11-04 
#2  4 1979-07-18   NA 
#3  5 2005-02-01 2009-09-17 
#4  5 2010-10-01 2012-10-06 
संबंधित मुद्दे