Ich möchte eine Funktion auf jede Zeile eines Datenrahmens anwenden. Mit apply ist das Ergebnis selbst kein Datenrahmen mehr, es sieht eher wie eine Liste oder Matrix aus? (Ich weiß nicht genug R, um aus der Ausgabe zu ersehen, dass es kein Datenrahmen ist)R: apply-ähnliche Funktion, die einen Datenrahmen zurückgibt?
Welches ist die richtige Funktion, um eine Funktion auf jede Zeile einer Daten anzuwenden Rahmen, einen neuen Datenrahmen zurückgeben?
Die Funktion i auf jede Zeile angewendet werden soll:
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")]
, die mir den Fehler
Fehler in gereinigt [c gibt ("cs-uri-stem", "cs-uri-query")]: Indizierung außerhalb der Grenzen
(Index außerhalb der Grenzen)
Aus irgendeinem Grund sind die Strukturänderungen in einer Weise, die falsch über die Indizierung macht.
[Bearbeiten]
Daten dieses ein funktionierendes Beispiel zu machen:
uri_map.tsv http://pastebin.com/XhUuTMqA
uri_map <- read.table("http://pastebin.com/raw/XhUuTMqA", sep="\t", header=FALSE)
und Eingangsdaten für die Transformationsfunktion:
Anfragen < - read.table ("http://pastebin.com/raw/b7ja4rKn", sep =““, header = TRUE)
'apply' transponiert:' gelten (Matrix (1: 4, 2), 1, Identität) '. – Roland
@Roland vielen Dank!Ist das nicht dokumentiert oder habe ich nicht sorgfältig genug gelesen? – kutschkem
Es ist dokumentiert in 'help (" apply ")', aber etwas kryptisch. – Roland