Hallo zusammen
ich hab eine Liste die besteht aus 9 Seiten.
page: int 1
results: data.frame: 20 obs. of 14 variables
..$ popularity: num [1:20]
..$ id: int [1:20]
.. $ genre_ids: List of 20
.. ..$: int [1:4]
.. ..$: int [1:5]
etc.
..$ title: chr [1:20]
Page: int 2
results: data.frame: 20 obs. of 14 variables
..$ popularity: num [1:20]
..$ id: int [1:20]
.. $ genre_ids: List of 20
.. ..$: int [1:4]
.. ..$: int [1:5]
etc.
..$ title: chr [1:20]
usw bis Seite 9
Ich wollte die ganzen Daten mit
map(purrr::pluck, "popularity", "id")
purrr::flatten()
magrittr::extract()
mit einer Pipe rausfiltern und in eine einzige Liste packen, aber irgendwie komme ich nicht vom Fleck.
Hat mir jemand einen Tipp?
merci, Karo
ListeinListe daten extraieren
Re: ListeinListe daten extraieren
Hallo Karo,
Bei einer Liste müsste dort stehen:
und warum heißt es bei Dir einmal page und beim zweiten Teil Page
Das beste wäre, Du würdest den output von
posten - bitte auch viewtopic.php?f=20&t=29 beachten.
Gruß, Jörg
ist das Objekt wirklich eine Liste?Karo hat geschrieben: Mo Apr 20, 2020 1:13 am ich hab eine Liste die besteht aus 9 Seiten.
page: int 1
results: data.frame: 20 obs. of 14 variables
..$ popularity: num [1:20]
..$ id: int [1:20]
...
Bei einer Liste müsste dort stehen:
Code: Alles auswählen
List of 9
$ page : int 1
$ results : data.frame: 20 obs. of 14 variables
..$ popularity: num [1:20]
..$ id: int [1:20]
...

Das beste wäre, Du würdest den output von
Code: Alles auswählen
dput(DeineObjekt)
Gruß, Jörg
Re: ListeinListe daten extraieren
HI zusammen
ich versuche es mal besser zu erklären... sorry, war wohl etwas zu später Stunde...
Mittels einer Funktion hole ich alle Daten von einer API-DB
das gibt eine "zusammengeführte Liste":
irgendwie merke ich gerade beim abschreiben meiner Daten, dass es mir nur die ersten beiden Seiten ins alldata_collect geschrieben hat und der Rest ist irgendwie leer. oder verstehe ich list() falsch? kann lapply nur 2 Seiten zusammenführen?
eigentlich wollte ich die Daten dann rausnehmen und eine Liste daraus machen:
Kann mir jemand einen Hinweis geben? DANKE!
ich versuche es mal besser zu erklären... sorry, war wohl etwas zu später Stunde...
Mittels einer Funktion hole ich alle Daten von einer API-DB
Code: Alles auswählen
my_function = function(id_)
{
return(fromJSON(paste0("https://api.themoviedb.org/3/discover/movie?api_key=myKey&language=en-US&sort_by=revenue.desc&include_adult=false&include_video=false&page=1&with_companies=3&with_runtime.gte=60&page=", id_), flatten = TRUE))
}
alldata_collect <-
lapply(1:9, my_function)
Code: Alles auswählen
alldata_collect List of 9
: List of 4
..$ page: int 1
..$ results: 'data.frame': 20 obs. of 14 variables:
.. ..$ popularity: num [1:20] 41.6 50.3 31.6. 17.4. etc....
.. ..$ id: int [1:20] 260513 301528 10193 etc...
.. .. ..$ : int [1:4] 28 12 16 etc.
:List of 4
..$ page: int 2
..$ results: 'data.frame': 3 obs. of 14 variables:
.. ..$ popularity: num [1:3] 17.4 143.1 10.6
.. ..$ id: int [1:3] 105864 508439 16187
.. .. ..$ : int [1:3] 12 16 10751
:List of 4
..$ page: int 3
..$ results : list()
:List of 4
..$ page: int 4
..$ results : list()
usw.
eigentlich wollte ich die Daten dann rausnehmen und eine Liste daraus machen:
Code: Alles auswählen
alldata <- alldata_collect %>%
map(purrr::pluck, "popularity", "id") %>%
purrr::flatten() %>%
magrittr::extract()
Re: ListeinListe daten extraieren
Hallo Karo,
da gibt es do.call() und Reduce().
Ein kleines Beispiel:
oder die Luxusvariante:
Gruß, Jörg
also, am lapply() liegt es nicht. Wahrscheinlich liefert Deine Funktion my_function() für Werte größer als 2 eine leere Liste. Schau Dir doch das Ergebnis an vonKaro hat geschrieben: Mo Apr 20, 2020 12:07 pmdas gibt eine "zusammengeführte Liste":Code: Alles auswählen
my_function = function(id_) { return(fromJSON(paste0("https://api.themoviedb.org/3/discover/movie?api_key=myKey&language=en-US&sort_by=revenue.desc&include_adult=false&include_video=false&page=1&with_companies=3&with_runtime.gte=60&page=", id_), flatten = TRUE)) } alldata_collect <- lapply(1:9, my_function)
...
irgendwie merke ich gerade beim abschreiben meiner Daten, dass es mir nur die ersten beiden Seiten ins alldata_collect geschrieben hat und der Rest ist irgendwie leer. oder verstehe ich list() falsch? kann lapply nur 2 Seiten zusammenführen?
Code: Alles auswählen
my_function(3) ## oder auch von
str(my_function(3))
Hier kann ich nur mit Unwissenheit glänzen. Ich würde das mit base R lösen;eigentlich wollte ich die Daten dann rausnehmen und eine Liste daraus machen:Code: Alles auswählen
alldata <- alldata_collect %>% map(purrr::pluck, "popularity", "id") %>% purrr::flatten() %>% magrittr::extract()
da gibt es do.call() und Reduce().
Ein kleines Beispiel:
Code: Alles auswählen
L <- list(list(page=1, result=BOD), list(page=2, result=BOD), list(page=3, result=BOD))
do.call(rbind, lapply(L, '[[', 2)) ## oder
Reduce(rbind, lapply(L, '[[', "result"))
Code: Alles auswählen
mybind <- function(d) cbind(page=d$page, d$result)
Reduce(rbind, lapply(L, mybind))