R: apply-like-Funktion zurückgibt, die einen Daten-frame?
Möchte ich anwenden einer Funktion auf alle Zeilen eines data Frames. Mit anwenden, ist das Ergebnis nicht selbst einen Daten-frame wieder, es sieht eher aus wie eine Liste oder matrix? (Ich weiß nicht genug R zu sein, in der Lage zu sagen, aus der Ausgabe, die ich bekommen, nur nicht, dass es einen Daten-frame)
Welche ist die richtige Funktion für die Anwendung einer Funktion auf alle Zeilen eines Daten-Frames, die einen neue Daten-frame?
Die Funktion möchte ich für jede Zeile:
map_uri <- function(request){
ret <- request
uri_stem <- uri_map[uri_map[,1] == request["cs-uri-query"],2]
if(length(uri_stem) > 0){
ret <- request
ret["cs-uri-stem"] <- uri_stem
ret["cs-uri-query"] <- "-"
}
if(request["cs-uri-stem"] == "/index.html"){
ret["cs-uri-stem"] = "/"
}
return(ret)
}
was ich versuche:
cleansed <- apply(requests, 1, map_uri)
cleansed[,c("cs-uri-query", "cs-uri-stem")]
gibt mir die Fehlermeldung
Fehler in gereinigt[, c("cs-uri-stem", "cs-uri-query")] : Indizierung
außerhalb der Grenzen
(Index out of bounds)
Für einige Grund, die änderungen in der Struktur in einer Weise, die macht über die Indizierung falsch.
[Bearbeiten]
Daten, um diese arbeiten Beispiel:
uri_map.tsv http://pastebin.com/XhUuTMqA
uri_map <- read.table("http://pastebin.com/raw/XhUuTMqA", sep="\t", header=FALSE)
Und Eingabe von Daten für die transformation Funktion:
Anforderungen <- read.Tabelle("http://pastebin.com/raw/b7ja4rKn", sep=" ", header=TRUE)
apply
transponiert:apply(matrix(1:4, 2), 1, identity)
.- ich danke Ihnen sehr! Ist das nur nicht dokumentiert oder habe ich nicht sorgfältig genug gelesen
- Es ist dokumentiert in
help("apply")
, aber etwas kryptisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du kann Verwendung der apply-Familie, aber, du hast Recht, das Ergebnis ist entweder eine
matrix
oderdata.frame
. Keine große Sache, aber wieder einendata.frame
.Ihre Funktion zurückgeben muss, etwas konsistent über mehrere Spalten (raw
iris
stattiris[, 1:4]
würde nicht funktionieren unten, weil deriris$Species
ein Faktor mit 3 Stufen, wosummary
gibt 6 numerisch aus einer numeric-Spalte) und das ist, wo ein reproduzierbar helfen würde. Unten habe ich verwendetiris
undsummary
:as.data.frame(apply(iris[, 1:4], 2, summary))
as.data.frame(sapply(iris[, 1:4], summary))
do.call(cbind, lapply(iris[, 1:4], summary))