У меня есть кадр данных с последовательностью числовых столбцов, окруженных с обеих сторон (несущественными) столбцами символов. Я хочу получить новый фрейм данных, который сохраняет положение неуместных столбцов и добавляет числовые столбцы друг к другу с помощью определенного вектора группировки (или применяет некоторые другие функции по строкам к кадру данных по группам). Пример:R data.frame: rowSums выбранных столбцов путем группирования вектора
sample = data.frame(cha1 = c("A","B"),num1=1:2,num2=3:4,num3=11:12,num4=13:14,cha2=c("C","D"))
> sample
cha1 num1 num2 num3 num4 cha2
1 A 1 3 11 13 C
2 B 2 4 12 14 D
с целью получить
> goal
cha1 X1 X2 cha2
1 A 4 24 C
2 B 6 26 D
т.е. я суммируется 4 числовых столбцов в соответствии с группировкой вектора gl(2,2,4) = (1,1,2,2) [levels: 1,2]
Для чисто цифрового кадра данных, я нашел следующий метод:
sample_num = sample[,2:5] #select numeric columns
data.frame(t(apply(sample_num,1,function(row) tapply(row, INDEX=gl(2,2,4),sum))))
Я мог бы комбинировать это с повторным использованием, вставляя столбцы символов, чтобы дать ожидаемый результат, но я действительно ищу более элегантный способ. Меня особенно интересует метод plyr
, если он есть, поскольку я пытаюсь перейти на plyr для всех моих манипуляций с фреймами данных. Я предполагаю, что первым шагом было бы превратить фрейм данных в длинный формат, но я не знаю, как исходить оттуда.
Требование «абсолютное» состоит в том, что я не могу обойтись без метода группировки gl(n,k,l)
, поскольку мне нужно, чтобы это применимо к широкому спектру кадров данных и факторов группировки.
EDIT: для простоты предположим, что я знаю, какие столбцы являются соответствующими числовыми столбцами. Я не забочусь о том, как их выбирать, я занимаюсь тем, как выполнять свою группированную сумму, не испортив исходную структуру фреймов данных.
Спасибо!
Я не unterstand, как работает группировка? где можно найти вектор группировки? пожалуйста, обновите свои данные выборки, включая вектор группировки – grrgrrbla
, в этом случае выбранный вектор группировки i (произвольно) - '(1,1,2,2)' i.e. Я хочу добавить первые два столбца и два вторых столбца. Для четырех столбцов это может быть любой коэффициент длины 4 с до 4 уровнями, например. (1,1,1,2) или (1,2,3,3). – user28400
, пожалуйста, укажите, что в вашем OP вы говорите о выборе столбцов и не группируете, ваш выбор слов здесь очень запутанный. – grrgrrbla