Ich habe einen Datensatz für eine Klasse, die ich nehme, die von dem UCI Machine Learning Repository kommt. Ich muss es nach Datum unterteilen und dann verschiedene Messungen nach Datum und Uhrzeit aufzeichnen. Um den Datensatz prep, verwende ich den folgenden Code:Erstellen neue Spalten in R Datensatz in Funktion
prep <- function(x) {
setwd("/Users/johnlynch/Google Drive/DataToolbox/Exploring/Week 1")
power <- read.csv("poweruse.txt", sep = ";", stringsAsFactors = FALSE)
power$Date <- strptime(power$Date, "%d/%m/%Y")
power <- subset(power, Date == "2007-02-01"|Date == "2007-02-02")
}
Dann, wenn ich mein Skript in der Konsole ausführen, I-Typ "Power < - prep()" und die subsetted Daten in die Variable setzen „Macht “genau so, wie ich erwarten:
Kopf (mydata)
Datum Zeit Global_active_power Global_reactive_power Spannung Global_intensity Sub_metering_1 Sub_metering_2 Sub_metering_3
666 37 2007-02-01 00:00:00 0,326 0,128 243,150 1,400 0,000 66637 0,000 0
66638 2007-02-01 00:01:00 0,326 0,130 243,320 1,400 0,000 66638 0,000 0
66639 2007-02 -01 00:02:00 0,324 0,132 243,510 1,400 0,000 66639 0,000 0
66640 2007-02-01 00:03:00 0,324 0,134 243,900 1,400 0,000 66640 0,000 0
66641 2007-02-01 00: 04:00 0.322 0.130 243.160 1.400 0.000 66641 0.000 0
66642 2007-02-01 00:05:00 0,320 0,126 242,290 1,400 0,000 66642 0,000 0
Allerdings habe ich entdeckt, als ich die Plots täte, um den Kurs Plots zu entsprechen, musste ich erstellen eine neue Spalte im Dataframe, $ newdate, indem die Spalten Datum und Uhrzeit zu einer kombiniert werden. Also versuchte ich meine Skript Einstellung zu sein, wie folgt:
prep <- function(x) {
setwd("/Users/johnlynch/Google Drive/DataToolbox/Exploring/Week 1")
power <- read.csv("poweruse.txt", sep = ";", stringsAsFactors = FALSE)
power$Date <- strptime(power$Date, "%d/%m/%Y")
power <- subset(power, Date == "2007-02-01"|Date == "2007-02-02")
power$newDate <- with(power, paste(Date, Time))
}
Ich dachte, hey, das sollte eine neue Spalte in dem Datenrahmen erstellen, die Ausgabe zusammen mit dem Rest der Daten in die mydata Variable sein würde. Allerdings, wenn ich diese Funktion ausführen, die einzige Ausgabe, die ich erhalte, ist der Inhalt der $ newdate Säule:
Kopf (mydata)
[1] „2007-02-01 00.00: 00" "2007-02-01 00.01.00" "2007-02-01 00.02.00" "2007-02-01 00.03.00"
[5] „2007-02- 01 00:04:00 "" 2007-02-01 00:05:00 "
Was mache ich falsch? Warum gibt das zweite Skript nicht den gesamten Datensatz aus, am Ende wird eine neue Spalte hinzugefügt? Und kann mir jemand sagen, wie ich das korrigieren kann?
Fügen Sie der letzten Zeile Ihrer Funktion 'return (power)' (oder nur 'power') hinzu. –
Weihuang hat es richtig. Eine Funktion gibt nur das Objekt in der letzten Codezeile zurück. In Ihrem Fall wurde nur eine Spalte erstellt. – winampman