2016-05-15 15 views
-1

Ich habe eine Spalte in einem Datensatz mit Daten gefüllt, und ich möchte sie durch Wochenwerte ersetzen. Gibt es eine Möglichkeit, eine bestimmte Zeitspanne festzulegen (z. B. vom 1. Januar 2016 bis zum 7. Januar 2016) und jedes Mal, wenn ein Datum in diesem Bereich durch einen anderen Wert ersetzt wird (z. B. Woche 1)? Danke für jede Hilfe!Ersetzen eines Bereichs von Spaltenwerten in R

Unten ist der Datensatz arbeite ich an:

Text Date   
Text 1 2016-02-05 10:55:00 
Text 2 2016-02-09 10:56:28 
Text 3 2016-02-18 20:40:33 


Desired output: 

Text Date   
Text 1 Week 1 
Text 2 Week 2 
Text 3 Week 3 
+0

Es auf Ihre Reisedaten variabel abhängig ist, wenn Sie das Datum innerhalb eines Jahres ist , können Sie die Funktion 'week()' im Paket 'lubridate' verwenden, um die Wochennummer zu erhalten. Aber wenn es über mehrere Jahre hinweg ist, müssen Sie etwas wie "cut" zum Konvertieren machen. – Psidom

+0

Die Wochen sind Wochen in einem Semester. Sie beginnen Ende Januar und laufen bis jetzt, insgesamt 12. Hat das Auswirkungen auf die Dinge? – Claire

+0

Solange es innerhalb eines Jahres ist, können Sie die Funktion 'week()' verwenden. – Psidom

Antwort

0

die Erläuterungen in den Kommentaren Folgen, sollte dieser Code die erwartete Ausgabe ergeben:

SemStartWeek <- 5 #variable introduced to avoid obscure "magic numbers" in code 
df1$Date <- paste("Week",as.numeric(strftime(df1$Date),"%W")) - SemStartWeek + 1) 
# Text Date 
#1 Text 1 Week 1 
#2 Text 2 Week 2 
#3 Text 3 Week 3 

Daten

df1 <- structure(list(Text = structure(1:3, .Label = c("Text 1", "Text 2", 
       "Text 3"), class = "factor"), Date = structure(1:3, 
       .Label = c("2016-02-05 10:55:00", "2016-02-09 10:56:28", 
       "2016-02-18 20:40:33"), class = "factor")), .Names = c("Text", 
       "Date"), class = "data.frame", row.names = c(NA, -3L)) 
+0

Das ist Woche des Jahres. Ich denke, sie wollen Woche des Monats, wenn ich mich nicht irre –

+0

Das sind Wochen in einem Semester. Also gibt es 1-12 und sie beginnen Ende Januar. – Claire

+0

@Claire Danke für die Klarstellung; Ich habe den Code entsprechend aktualisiert. Es wird nicht geprüft, ob das angegebene Datum in das Semester fällt, daher ist die Ausgabe nicht unbedingt auf "Woche 1" bis "Woche 12" beschränkt. Die Ausnahmebehandlung zur Behandlung von Fällen ungültiger Daten ist im Code leicht einzuführen, scheint jedoch den Rahmen dieser Frage zu sprengen. – RHertel

0

Beste lubridate der wday zu verwenden. Zuerst es installieren, wenn Sie es nicht haben:

install.packages("lubridate") 

Als einfaches Beispiel:

library(lubridate) 
mydate <- as.Date("2016-02-05 10:55:00", format = "%Y-%m-%d") 
wday(mydate) 

PS: 1 Sonntag ist. markieren Sie es gefälligst als Lösung

dat$Week <- wday(
    as.Date(dat$Date, format = "%Y-%m-%d") 
) 

Wenn dies Ihre Frage beantwortet &/oder bis-vote es:

es für die gesamte Spalte zu tun.

+0

Es besagt, dass die Lubridate-Bibliothek nicht existiert? – Claire

+0

Sie müssen es installieren, 'install.packages (" lubdridate ")' – user10853