Как создать список внутри фрейма данных - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу иметь три столбца в кадре данных, содержащем по одной строке с каждой ячейкой, содержащей список

Ввод

mylist1 <- strsplit(c("banana","tomato","NA"), ",")
mylist2 <- strsplit(c("orange","nut","tomato"), ",")
mylist3 <- strsplit(c("orange","nut","NA"), ",")

Желаемый вывод

mylist1   mylist2   mylist3
list       list       list

но в данный момент я получаю фрейм данных, который разбивает список на отдельные столбцы. Как мне создать список списков в фрейме данных?

Текущий вывод

structure(list(X.banana. = "banana", X.tomato. = "tomato", X.NA. = "NA", 
               X.orange. = "orange", X.nut. = "nut", X.tomato..1 = "tomato", 
               X.orange..1 = "orange", X.nut..1 = "nut", X.NA..1 = "NA"), class = "data.frame", row.names = c(NA, 
                                                                                                              -1L))

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вот другой способ.Сначала мы помещаем все в список, затем сопоставляем кадр данных.Наконец, мы распространяем данные на широкий.

library(tidyverse)

df <- list(mylist1, mylist2, mylist3) %>% 
  map_df(., ~tribble(~col, .x)) %>%
  mutate(name = c("mylist1", "mylist2", "mylist3")) %>% 
  spread(name, col)
df
#> # A tibble: 1 x 3
#>   mylist1    mylist2    mylist3   
#>   <list>     <list>     <list>    
#> 1 <list [3]> <list [3]> <list [3]>

И каждый столбец содержит список:

df$mylist1
#> [[1]]
#> [[1]][[1]]
#> [1] "banana"
#> 
#> [[1]][[2]]
#> [1] "tomato"
#> 
#> [[1]][[3]]
#> [1] "NA"
0 голосов
/ 25 сентября 2018

Вот один из способов:

df <- data.frame(row.names=1)
df$l1 <- list(mylist1)
df$l2 <- list(mylist2)
df$l3 <- list(mylist3)

> dim(df)
[1] 1 3
> df
                  l1                  l2              l3
1 banana, tomato, NA orange, nut, tomato orange, nut, NA

Другой, более программно дружественный способ - сначала поместить их в матрицу:

df <- as.data.frame(matrix(list(mylist1, mylist2, mylist3), nrow=1))

> df
                  V1                  V2              V3
1 banana, tomato, NA orange, nut, tomato orange, nut, NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...