Создание нового фрейма данных с размерами, отличными от исходного - PullRequest
0 голосов
/ 26 февраля 2020

У меня много проблем с получением желаемого результата. Итак, у меня есть фрейм данных, подобный приведенному ниже, где есть два столбца со списком чисел и идентификатором. Список номеров хранится как символ. В основном мне просто нужно иметь одну строку для каждого числа в списке с правильным идентификатором. Я попытался использовать apply, и для каждой строки я смог создать список чисел и список идентичной длины идентификатора, но возвращаемое значение применимо к списку, содержащему два списка, которые я не знал, как легко преобразовать в фрейм данных Любая помощь будет оценена.

df = data.frame(type = "1", y = 'set(1,2,3,4)')
desired_df = data.frame(type = rep("1", len(list(1,2,3,4)), y = c(1,2,3,4))

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Если у вас есть общие данные, вы можете удалить ненужные символы из столбца y, используя gsub, а затем использовать separate_rows для получения данных в длинном формате.

library(dplyr)

df %>%
  mutate(y = gsub('[set()]', '', y)) %>%
  tidyr::separate_rows(y, sep = ',', convert = TRUE)

#  type y
#1    1 1
#2    1 2
#3    1 3
#4    1 4
0 голосов
/ 26 февраля 2020

Возможные способы обработки этого после переформатирования 'set (...)' в список или вектор:

1) Прямо из вектора

data.frame(type = "1", y = 1:4)

2) Создать фрейм данных из списка затем поворачивается длиннее

tidyr::pivot_longer( data.frame(type = "1", y = list(1, 2, 3, 4)),
                     cols = -type
)

3) Затем добавляется переменная длины (или nrow)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...