Распространение столбцов в R приводит к нехватке памяти

У меня есть форма опроса, и мне нужно сгруппировать этот набор данных в одну строку, но у меня есть некоторые проблемы с использованием распространения и группировки.

Мой набор данных имеет следующий формат: данные

country date_   user_id int_id  user_name   ext_name    q_order questions   answers
AR  2019    AR-100  XP200   jhon foo    damian, khon    1   Question1 … yes
AR  2019    AR-100  XP200   jhon foo    damian, khon    2   Question2 … 0
AR  2019    AR-100  XP200   jhon foo    damian, khon    3   Question3 … no apply
AR  2019    AR-100  XP200   jhon foo    damian, khon    4   Question4 … 0
AR  2019    AR-100  XP200   jhon foo    damian, khon    5   Question5 … 0
AR  2019    AR-100  XP200   jhon foo    damian, khon    6   Question6 … yes
US  2018    US-100  PP300   Peter fields    jhon voigh  1   Question1 … no
US  2018    US-100  PP300   Peter fields    jhon voigh  2   Question2 … 0
US  2018    US-100  PP300   Peter fields    jhon voigh  3   Question3 … yes apply
US  2018    US-100  PP300   Peter fields    jhon voigh  4   Question4 … 0
US  2018    US-100  PP300   Peter fields    jhon voigh  5   Question5 … 0
US  2018    US-100  PP300   Peter fields    jhon voigh  6   Question6 … no

Я попытался сгруппировать получившийся набор данных, но всегда получаю 14 строк вместо 2.

Код:

data %>% 
    group_by(country=.$country  ,
             date_ = .$date_,
             medic_id=.$user_id,
             user_id= .$int_id,
             user_name= .$user_name,
             ext_name= .$ext_name,
             q_order=.$q_order
             ) %>% 
    spread(questions, answers) 

Код выше, выдает мне нехватку памяти.

Я даже пробовал с dcast

data %>% 
    select(-q_order) %>% 
    dcast( ...  ~ questions, value.var = "answers")

И я получаю следующее:

Country.Code    Created.Date    user_id int_id  user_name   ext_name    Question1 … Question2 … Question3 … Question4 … Question5 … Question6 …
AR  3/28/2019   AR-100  XP200   jhon foo    damian, khon    1   2   0   1   1   1
US  4/28/2019   US-100  PP300   Peter fields    jhon voigh  0   1   1   2   1   2

но мне нужно :

Country.Code    Created.Date    user_id int_id  user_name   ext_name    Question1 … Question2 … Question3 … Question4 … Question5 … Question6 …
AR  3/28/2019   AR-100  XP200   jhon foo    damian, khon    yes 0   no apply    0   0   yes
US  4/28/2019   US-100  PP300   Peter fields    jhon voigh  no  0   yes apply   0   0   no

Почему dcast преобразует в числовые значения все значения из переменной ответов? (Я даже пробовал с var.values ​​= 'answers')?

Мой вопрос очень похож на этот ссылка!

Но я не могу заставить его работать, всегда выделяю память или генерирует с числовыми значениями вместо значений из переменной ответов.


person Fernando    schedule 04.07.2019    source источник
comment
Не знаю, изменится ли это, но вам не нужны все группы group_by для spread. Также - какие тусклости для вашего фрейма данных?   -  person iod    schedule 04.07.2019
comment
Можете ли вы попробовать с dcast из таблицы данных на свежем сеансе   -  person akrun    schedule 04.07.2019
comment
Кроме того, отбросьте q_order, прежде чем распространять - иначе он не будет работать.   -  person iod    schedule 04.07.2019
comment
Привет @akrun, да, я пробовал, но с dcast я не получил это из памяти, я получаю только набор данных с числовыми значениями вместо значений ответов   -  person Fernando    schedule 04.07.2019
comment
Привет @iod, да, и пробовал   -  person Fernando    schedule 04.07.2019
comment
Что происходит, когда вы делаете data %>% select(-q_order) %>% spread(questions, answers) ?   -  person iod    schedule 05.07.2019
comment
Привет, йод: никогда не кончится!   -  person Fernando    schedule 05.07.2019


Ответы (1)


Я наконец нашел ответ!

Проблема заключалась в том (что я новичок в R), что я хочу иметь значения некоторых столбцов в строках, но эти значения являются символами, и в большинстве своем решения обрабатывают числовые, а не символы!

С другой стороны, мое решение (пример с 5 строками) отлично работает с RESHAPE !, но с реальным набором данных (маленький - средний) я получаю нехватку памяти (никогда не заканчивается).

Например, следующий код никогда не заканчивается (и да, я тоже пробовал с группой, как я уже сказал)

b<-reshape(data=a %>% select(-q_order) ,
           direction="wide",
           idvar = c("Country.Code","Created.Date", "user_id", "int_id", "user_name",
                     "ext_name"),
           timevar="questions" )

Это решение запускается за 2 секунды:

b<-dcast( a, Country.Code+Created.Date+user_id+int_id +user_name+ ext_name ~ questions,
          toString, value.var="answers")

Ну наконец то

Country.Code    Created.Date    user_id int_id  user_name   ext_name    Question1 … Question2 … Question3 … Question4 … Question5 … Question6 …
AR  3/28/2019   AR-100  XP200   jhon foo    damian, khon    yes 0   no apply    0   0   yes
US  4/28/2019   US-100  PP300   Peter fields    jhon voigh  no  0   yes apply   0   0   no
person Fernando    schedule 07.07.2019