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

Я собираю данные истории голосования из PDF-файлов.Имена разделены пробелами в одной переменной.Хотите изменить фрейм данных, чтобы для имен существовал отдельный столбец

Имена были разделены, а пробелы удалены.Он создал список различной длины - в зависимости от того, кто за него проголосовал - в новом столбце во фрейме данных.Кроме того, экспериментировал с функцией separate в пакете dplyr.

#data.frame as is
bill <- c("HB1", "HB2")
names <- c("a    b", "a")
df.0 <- data.frame(bill = bill, names = names, stringsAsFactors = F)
df.0

#data.frame desired
bill <- c("HB1", "HB1", "HB2")
names <- c("a", "b", "a")
df.1 <- data.frame(bill = bill, names = names, stringsAsFactors = F)
df.1

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

1) тидир :: Отдельные_строки Попробуйте separate_rows в тидыре:

library(dplyr)
library(tidyr)

df.0 %>% separate_rows(names)

, дающие:

  bill names
1  HB1     a
2  HB1     b
3  HB2     a

1а) тидир ::unnest Можно создать другое решение тидира из strsplit и unnest:

df.0 %>%
  mutate(names = strsplit(names, "\\s+")) %>%
  unnest

, дающее:

  bill names
1  HB1     a
2  HB1     b
3  HB2     a

2) стек / strsplit Эта альтернатива не использует пакеты.Здесь мы используем strsplit, чтобы разбить names на список символьных векторов.Добавьте к этому bill имен и используйте stack, чтобы связать это с данными.stack даст ему жестко закодированные имена, поэтому используйте setNames, чтобы установить имена обратно.

setNames(with(df.0, stack(setNames(strsplit(names, "\\s+"), bill)))[2:1], names(df.0))

давая:

  bill names
1  HB1     a
2  HB1     b
3  HB2     a
0 голосов
/ 21 декабря 2018

Попробуйте:

library(tidyr)
separate_rows(df.0, names)

# output
  bill names
1  HB1     a
2  HB1     b
3  HB2     a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...