Сводка данных в R с повторяющимися строками

Попытка сделать простой поворот в R, как и в SQL.

Я понимаю, что этот вопрос был задан, однако у меня проблемы с повторяющимися строками.

Сводка данных в R

В настоящее время данные представлены в этом формате (символы - это просто заполнители для удобства просмотра. Фактические данные числовые):

V1 V2 V3 V4
A  B  C  Sales
D  E  F  Sales
G  H  I  Technical
J  K  L  Technical

И его нужно преобразовать в такой формат:

Variable Sales Technical
V1       A     G
V1       D     J
V2       B     H
V2       E     K
V3       C     I
V3       F     L

Я пробовал пакеты reshape и tidyr, и они либо объединяют данные в случае изменения формы, либо выдают ошибки для повторяющихся идентификаторов строк в случае tidyr.

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

Я ошибаюсь? Это правильные пакеты для использования или кто-нибудь может предложить другой метод?


person Praxis    schedule 16.06.2017    source источник


Ответы (2)


Надеюсь, это сработает:

df %>% gather(Variable, Value, V1:V3) %>%
    group_by(V4, Variable) %>%
    mutate(g = row_number()) %>%
    spread(V4, Value) %>% ungroup() %>%
    select(-g)

# # A tibble: 6 x 3
#   Variable Sales Technical
# *    <chr> <chr>     <chr>
# 1       V1     A         G
# 2       V1     D         J
# 3       V2     B         H
# 4       V2     E         K
# 5       V3     C         I
# 6       V3     F         L
person mt1022    schedule 16.06.2017
comment
Фантастика, это сработало !! Отлично, большое спасибо - person Praxis; 16.06.2017

Другой вариант - melt/dcast от data.table

library(data.table)
dcast(melt(setDT(df1), id.var = 'V4'), variable + rowid(V4) ~
                V4, value.var = 'value')[, V4 := NULL][]
#   variable Sales Technical
#1:       V1     A         G
#2:       V1     D         J
#3:       V2     B         H
#4:       V2     E         K
#5:       V3     C         I
#6:       V3     F         L
person akrun    schedule 16.06.2017