Ich versuche, die Namen von Listenelementen zu nehmen und verwenden Sie do(), um eine Funktion über alle anzuwenden, dann binden Sie sie in einem einzigen Datenrahmen.Verwendung von do() mit Namen von Listenelementen
require(XML)
require(magrittr)
url <- "http://gd2.mlb.com/components/game/mlb/year_2016/month_05/day_21/gid_2016_05_21_milmlb_nynmlb_1/boxscore.xml"
box <- xmlParse(url)
xml_data <- xmlToList(box)
end <- length(xml_data[[2]]) - 1
x <- seq(1:end)
away_pitchers_names <- paste0("xml_data[[2]][", x, "]")
away_pitchers_names <- as.data.frame(away_pitchers_names)
names(away_pitchers_names) <- "elements"
away_pitchers_names$elements %<>% as.character()
listTodf <- function(x) {
df <- as.data.frame(x)
tdf <- as.data.frame(t(df))
row.names(tdf) <- NULL
tdf
}
test <- away_pitchers_names %>% group_by(elements) %>% do(listTodf(.$elements))
Wenn ich die listTodf
Funktion auf einem Listenelement laufen funktioniert es gut:
listTodf(xml_data[[2]][1]
id name name_display_first_last pos out bf er r h so hr bb np s w l sv bs hld s_ip s_h s_r s_er s_bb
1 605200 Davies Zach Davies P 16 22 4 4 5 5 2 2 86 51 1 3 0 0 0 36.0 41 24 23 15
s_so game_score era
1 25 45 5.75
Aber wenn ich eine Schleife durch die Namen der Elemente mit dem do() Funktion versuchen, erhalte ich die folgende :
Warning message: In rbind_all(out[[1]]) : Unequal factor levels: coercing to character
Und hier ist die Ausgabe:
Ich bin mir sicher, dass es etwas sehr einfaches ist, aber ich kann nicht herausfinden, wo die Dinge stolpern.
Können Sie erklären, warum Sie die Gruppenvariable sind zur Umsetzung der von der gleichen Variable gruppieren und dann das Ganze als data.frame kombinieren? Bitte erläutern Sie, was genau Sie mit einem [minimal reproduzierbaren Beispiel] tun möchten (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – shreyasgm
Jedes Element der Liste hat die gleichen Variablen, sie repräsentieren nur verschiedene Fälle. Also versuche ich, jedes Element zu nehmen, kombiniere es und zeige es dann in breiter Form an (seit das Umwandeln eines Listenelements in einen Datenrahmen in langer Form angezeigt wird). – BillPetti
Wenn Sie die Zeichenfolgen auswerten, verwenden Sie 'eval (parse (..' dh 'lapply (away_pitchers_names $ elements, function (x) listTodf (eval (parse (text = x)))) Beachten Sie auch, dass in der listTodf' function '' as.data.frame' 'wird ohne 'stringsAsFactors = FALSE' aufgerufen, so dass alle Zeichenspalten standardmäßig' factor' Klasse sind, was zu der in Ihrem Post erwähnten Warnung führt. – akrun