Mam złożoną listę, która składa się z innych list i ramek danych. Muszę uprościć tę listę, aby składała się tylko z ramek danych - więc każda lista drugiego poziomu powinna zostać przekształcona w oddzielne ramki danych pierwszego poziomu.Konwersja złożonych list list do listy ramek danych
Oto powtarzalne przykład:
dd<-data.frame(x=1:3,y=4:6)
l1<-list(dd,list(dd,dd))
#original list
l1
[[1]]
x y
1 1 4
2 2 5
3 3 6
[[2]]
[[2]][[1]]
x y
1 1 4
2 2 5
3 3 6
[[2]][[2]]
x y
1 1 4
2 2 5
3 3 6
Wyniki Należy uzyskać
l2<-list(dd,dd,dd)
l2
[[1]]
x y
1 1 4
2 2 5
3 3 6
[[2]]
x y
1 1 4
2 2 5
3 3 6
[[3]]
x y
1 1 4
2 2 5
3 3 6
I Próbowano funkcji unlist()
i argumentów recursive=FALSE
ale w tym przypadku pierwszej ramki danych poziomu przeprowadza się w dwóch wektorów .
unlist(l1,recursive=FALSE)
$x
[1] 1 2 3
$y
[1] 4 5 6
[[3]]
x y
1 1 4
2 2 5
3 3 6
[[4]]
x y
1 1 4
2 2 5
3 3 6
Dzięki! Cały czas myślałem w odwrotnym kierunku - jak podzielić listę. Pomysł konwersji ramki danych na listę ramek danych jest świetny. –
Próbowałbym uniknąć 'class (x) ==" data.frame "' i użyj 'is.data.frame' zamiast. – shadow
Nie wiesz, na czym polega problem, aby tego uniknąć. czy mógłbyś rozwinąć? 'is.data.frame' używa wewnętrznie' dziedziczenia' i dałoby TRUE dla obiektów pochodnych od 'data.frame'. Na przykład na 'data.table'. Jeśli jest to pożądane, to tak, użycie 'dziedziczenia' jest lepsze. – Arun