2017-10-05 2 views
0

Ich bin noch neu bei R und habe das Gefühl, dass es einen besseren Weg geben muss, um das zu tun, was ich getan habe. Ich versuche einen Prozess zu vergleichen und zu bestimmen, ob er in eine bestimmte Sequenz passt .... Auch später möchte ich das erweitern, um zu sagen, ob Sequenz A, dann "cool", sonst wenn Sequenz b dann "irgendwie cool", sonst "überhaupt nicht cool".Vergleichen von Daten in R

Für die Probendaten, lassen Sie uns feststellen, ob Bäcker die richtigen Schritte zum Backen eines Rezepts befolgen.

merged_data <-(sampledata,proper_sequence, "sequence description") 

1. Baker Actual_Sequence_# Sequence  proper sequence 
3. John  1   Bought ingredients 1 
4. John  2   Read recipe   1 
5. Jack  1   Read recipe   1 
6. Jack  2   Bought ingredients 1 
7. Jack  3   Mixed ingredients  3 
8. Jack  4   Preheated oven  2 
9. Jane  1   Preheated oven  2 
10. Jane  2   Bought ingredients 1 
11. Jill  1   Mixed ingredients  2 



#spread the data by actual sequence and fill with proper sequence; I feel this step could be cut out, but not sure how. 

spread_data<- spread(sampledata,key = "Actual_Sequence_#",value = "proper sequence") 

1. Baker  1 2 3 4 
2. John  1 1  
3. Jack  1 1 3 2 
4. Jane  2 1  
5. Jill  2 

verketten und beseitigen Duplikate

Ich brauche eigentlich mit diesem Stück Code helfen. gewünschtes Ergebnis ist ein zweispaltige Datenrahmen

condensed_data<- spread_data(group_by(Baker),????) 

1. Baker Sequence concactenated 
2. John  1  
3. Jack  1,3,2 
4. Jane  2,1  
5. Jill  2 

eine neue Spalte hinzufügen, die verketteten tatsächliche Sequenz mit dem richtigen Reihenfolge wertet

evaluation <- mutate(eval_of_sequence= 
ifelse(grepl("1,2,3,4",condensed_data$`concatenated`),"following proper sequence", 
ifelse(grepl("1,2,3",condensed_data$`concatenated`),"following proper sequence", 
ifelse(grepl("1,2",condensed_data$`concatenated`),"following proper sequence", 
ifelse(grepl("1",condensed_data$`concatenated`),"following proper sequence", 
"breaking proper sequence")) 

1. Baker Sequence_concatenated evaluation 
2. John  1   following proper sequence 
3. Jack  1,3,2  breaking proper sequence 
4. Jane  2,1   breaking proper sequence 
5. Jill  2   following proper sequence 
+0

Ich verstehe nicht, was all diese Schrägstriche sind. Siehe [Erstellen eines reproduzierbaren Beispiels] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproductible-example), um die Beispieldaten und die gewünschte Ausgabe richtig einzubinden . – MrFlick

+2

Es ist besser, wenn Sie R-Code geben, wo Sie die Anfangsdaten füllen und nur eine Frage stellen. –

+0

Entschuldigung, Whey Ich tippte es aus, es war nicht den Text zu trennen, also habe ich Schrägstriche ... Ich schrieb es um –

Antwort

0
library(dplyr) 

#Create data.frame that looks roughly like yours 
merged_data <- data.frame(Baker = c("John", "John", "Jack", "Jack", "Jack", "Jack", "Jane", "Jane", "Jill"), 
       Actual_Sequence = c(1,2,1,2,3,4,1,2,1), 
       proper_sequence = c(1,1,1,1,3,2,2,1,2)) 

#Use dplyr to group by baker, concatenate their process, then evaluate 
#by comparing to the proper sequence field. If equal assume correct. 
merged_data %>% 
    group_by(Baker) %>% 
    summarise(Actual_Sequence = paste(Actual_Sequence, collapse = ","), 
      proper_sequence = paste(proper_sequence, collapse = ",")) %>% 
    mutate(evaluation = ifelse(Actual_Sequence == proper_sequence, "following proper sequence", "breaking proper sequence")) 

Wenn ich Ihren Beitrag richtig zu verstehen, und ich bin nicht sicher, Ich tue, das wird Ihnen das gewünschte Ergebnis geben. Sie können mit der dplyr-Anweisung fiedeln, um herauszufinden, wie es funktioniert.

+0

Danke dafür! Ich musste eine Anpassung vornehmen, weil ich den Sequenzcode 99 vergessen hatte, als jemand beschloss, zu beenden. Aber das Beispiel, das Sie mir gegeben haben, erlaubte mir, genug von diesem Prozess darauf zu verallgemeinern. Danke noch einmal. –