разные функции агрегации для разных столбцов

У меня есть кадр данных со следующими столбцами: ID Factor 1 -> 5 (5 столбцов; 1 на фактор) Недели года (52 столбца, 1 в неделю)

Недели года содержат элементы тома, либо 0, 1, 2, либо, в некоторых случаях, до 64.

Столбцы факторов — это значение, которое представляет собой время взаимодействия человека с элементом.

Вот как выглядят данные:

mydata

Как вы можете видеть в прикрепленном файле, ID может иметь несколько строк.

Я хочу сделать следующее в r... Я хотел бы суммировать ячейки томов для всех уникальных значений идентификатора и получить максимум для каждого фактора по каждому уникальному значению идентификатора.

У меня нет кода для показа, так как я не очень хорошо разбираюсь в том, как это сделать в r.

Каков мой ожидаемый результат: если я считаю, что идентификатор заканчивается на 250557, есть два экземпляра. Я бы ожидал, что Facotr 1 = 4; Фактор 2 = 1, факторы 3,4 и 5 = 0. Затем, глядя по горизонтали за неделю, я ожидаю следующее... 1,1,1,2,1,3,1,1,1,1,1 ,2,1,2,2,1,2,1,2,1

любая помощь будет оценена. Огромное спасибо заранее.


person Pritesh R. Patel    schedule 14.06.2019    source источник
comment
мысли вслух после того, как я опубликую это .... было бы лучше разделить таблицу на таблицу факторов и таблицу объемов, выполнить суммирование или максимизацию, а затем вернуть их обратно, используя функцию соединения слева в r ??   -  person Pritesh R. Patel    schedule 14.06.2019


Ответы (1)


Рассмотрите возможность преобразования коэффициентов в числовые для нужд агрегирования. Затем запустите отдельные агрегации по диапазонам столбцов и статистике (например, max и sum) и объедините выходные данные вместе.

df[sapply(df, is.factor)] <- as.numeric(df[sapply(df, is.factor)])

factor_max_df <- aggregate(cbind(Factor1, Factor2, Factor3, Factor4, Factor5) ~ ID1, df, 
                           max)

volume_sum_df <- aggregate(. ~ ID1, subset(df, select=[-c(Factor1, Factor2, Factor3,
                                                          Factor4, Factor5)], 
                           sum)

final_df <- merge(factor_max_df, volume_sum_df, by="ID1")
person Parfait    schedule 14.06.2019