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:

http://pastebin.com/b7ja4rKn

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.
InformationsquelleAutor kutschkem | 2016-05-02
Schreibe einen Kommentar