Используйте tapply (dataframe, index, function) в R, передавая в качестве аргумента функции 2 столбца

Я хотел бы использовать функцию tapply () для фрейма данных, группируя строки с помощью индексации. Моя проблема в том, что аргумент, который я передал бы функции, - это не один столбец, а пара столбцов. Это связано с тем, что 2 столбца кадра данных представляют точки x-y, которые предназначены как пары. Запуск tapply (фрейм данных, индексы, функция) дает мне ошибку, заключающуюся в том, что длина индексов отличается от длины tapply. Как я могу это решить? Спасибо!


person Leoo    schedule 17.04.2021    source источник


Ответы (1)


Если необходимо суммировать более одного столбца, используйте aggregate вместо tapply (поскольку tapply работает для одного столбца)

aggregate(.~ indexes, transform(df1, indexes = indexes), FUN = yourfun)

Или другой вариант - by

by(df1, list(indexes), FUN = yourfun)

Или это может быть более гибким с tidyverse

library(dplyr)
df1 %>%
    group_by(indexes) %>%
    summarise(across(c(x, y), yourfun), .groups = 'drop')

На небольшом воспроизводимом примере

indexes = rep(1:2, c(3, 2))
by(mtcars[1:5, 1:5], indexes, FUN = sum)
person akrun    schedule 17.04.2021
comment
Большое спасибо, Акрун !! Это решило это. - person Leoo; 18.04.2021