Заказать и заполнить список и его подсписки по именам - PullRequest
0 голосов
/ 06 мая 2018

Например, если у меня был список с именем «mylist» (пожалуйста, запустите следующий код, чтобы увидеть пример исходной структуры):

list1 <- list(b = 2 , c = 3  , a=7)
list2 <- list(f="g" , d = "a", c = "b" , e="f")
list3 <- list(i=10 ,o="b", j=7 , m="a")
sublist1 <- list(list1, list2)
mylist <- list(sublist1, list3)

Есть ли способ сортировки списка и подсписков в алфавитном порядке по их именам? (пожалуйста, запустите следующий код, чтобы увидеть пример желаемого вывода в списке с именем «mylist»)

list1 <- list(a = 7  , b = 2   , c=3)
list2 <- list(c = "b", d = "a" , e="f", f="g")
list3 <- list(i=10 , j=7 , m="a",o="b")
sublist1 <- list(list1, list2)
mylist <- list(sublist1, list3)

В конечном итоге я хотел бы преобразовать его в фрейм данных:

mylist<-data.frame(t(c("7", "2", "3", "b", "a", "f", "g", "10", "7" ,"a", "b")))
names(mylist)<-c("a","b","c1","c2","d","e","f","i","j","m","o")

В качестве второго вопроса, возможно ли заполнить списки и подсписки, чтобы они имели одинаковую структуру? Это выглядело бы так (пустые регистры, заполненные ".", Пожалуйста, запустите следующий код, чтобы увидеть пример желаемого вывода в списке с именем "mylist"):

list1 <- list(a = 7, b = 2   , c=3     , d="."  , e=".", f="." )
list2 <- list(a=".", b = "." , c = "b" , d = "a", e="f", f="g" )
list3 <- list(i=".",j="."    , m="."   , o=".")
sublist1<-list(list1,list2)
sublist1<-list(sublist1,list3)


list4 <- list(a=".", b = "." , c=  "." , d="."  , e=".", f="." )
list5 <- list(a=".", b = "." , c = "." , d="."  , e=".", f="." )
list6 <- list(i=10 , j=7     , m="a"   , o="b")
sublist2<-list(list4,list5)
sublist2<-list(sublist2,list6)

mylist <- list(sublist1, sublist2)

В конечном итоге я хотел бы преобразовать его в фрейм данных следующим образом:

firstrow<-(c("7", "2", "3", ".", ".", ".", ".", ".", "b" ,"a", "f", "g", ". ", ".", ".", "."))
secondrow<-(c(".", ".", ".", ".", ".", ".", ".", ".", "." ,".", ".", ".", "10", "7", "a", "b"))
mylist<-t(data.frame(firstrow, secondrow))
colnames(mylist)<-c("a1","b1","c1","d1","e1","f1","a2","b2","c2","d2","e2","f2","i","j","m","o")
rownames(mylist)<-c("1","2")

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 06 мая 2018

Вы можете отсортировать список по имени с помощью основного кода R и применить его к каждому подсписку. Вы можете сначала удалить этот список на фрейм данных.

list1 <- list(b = 2 , c = 3  , a=7)

list1[order(names(list1))]
#> $a
#> [1] 7
#> 
#> $b
#> [1] 2
#> 
#> $c
#> [1] 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...