Как разбить список на основе строк - автоматически - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу разделить список на основе автоматически сгенерированного словаря / индекса / глоссария / notsurehowtocallit

У меня есть фрейм данных, где последний столбец является списком символов.Некоторые из них содержат 3 строки, некоторые 20, другие нет.Данные выглядят примерно так

     name    age    category
1    John    34     c('sports', 'USA')
2    Mary    20     c('model', 'sports', 'Canada')
3    Sue     65     c('scholar', 'USA')
4    Carl    12     NA
n    ...     ..     ...

Данные очень длинные, и я не знаю, что искать.Это означает, что у меня нет ожидаемого списка строк.Я хочу, чтобы R решил эту проблему для меня и сгенерировал для меня этот список строк.

Для этого я уже пробовал:

 > category.frq <- table(unlist(category))
 > cbind(names(category.frq),as.integer(category.frq))

, что дает мне удобный счетчик слов и индекс,Но я новичок в R, поэтому я не уверен, что делать дальше.Есть ли пакет, который может сделать это для меня?

В идеале я бы получил такой результат:

     name    age    category                        sports   USA   model  ...
1    John    34     c('sports', 'USA')              1        1     NA
2    Mary    20     c('model', 'sports', 'Canada')  1        NA    1
3    Sue     65     c('scholar', 'USA')             NA       1     NA
4    Carl    12     NA                              NA       NA    NA
n    ...     ..     ...                             ..       ..    ..

1 Ответ

0 голосов
/ 12 февраля 2019

Чуть более подробное изложение комментария @ Акруна ...

df1 <- data.frame(category = I(list(c('a','b','c', 'a'), 
                                    c('b','d'), 
                                    c('b', 'e', 'f', 'd'), 
                                    c('g','h'),
                                    NA)))

l <- df1$category
names(l) <- seq_len(length(l))
df2 <- as.data.frame.matrix(t(table(stack(l))))
df2[df2 == 0] <- NA
df1 <- cbind(df1, df2)
df1

#    category  a  b  c  d  e  f  g  h
#1 a, b, c, a  2  1  1 NA NA NA NA NA
#2       b, d NA  1 NA  1 NA NA NA NA
#3 b, e, f, d NA  1 NA  1  1  1 NA NA
#4       g, h NA NA NA NA NA NA  1  1
#5         NA NA NA NA NA NA NA NA NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...