При использовании функции By в R, как создать вектор факторов для каждой группы? - PullRequest
0 голосов
/ 22 ноября 2018

Я использую функцию «by» в R, и в конце я хотел бы также вектор с факторами в нем, потому что я хочу создать фрейм данных, который имеет то, что я вычислил, и коэффициент рядом с ним, которыйфункция, используемая для подмножества этой конкретной группы.Как извлечь факторы из вывода?Настройка выглядит следующим образом.

id <- rep(14:18,each=5)
x <- rep(5:9,each =5)
y <- rep(5:9, each = 5)
t <- data.frame(id = id,x=x,y=y)
s <- by(t,id,function(h){ (h$x%*%h$y)/sum(h$y)})

В окончательном выводе я бы хотел что-то вроде этого.

sum id 
 5  14
 6  15
 7  16
 8  17
 9  18

Спасибо

1 Ответ

0 голосов
/ 23 ноября 2018

Рассмотрите возможность возврата фрейма данных в вашем вызове by, а не в вектор с одним значением, где ваши вычисления отображаются как новый столбец, а столбцы x и y удаляются, используя всеtransform(), функция для манипулирования столбцами и последующего возврата скорректированного фрейма данных.

Затем, чтобы избежать дублирования данных (поскольку вы выполняете агрегирование), оберните результат в unique().Наконец, поскольку by вернет список однорядных фреймов данных, запустите do.call(rbind, ...) снаружи, чтобы связать все элементы вместе.

df_list <- by(t,id, function(sub)
                        unique(transform(sub, 
                                         sum_output = (x %*% y) / sum(y), 
                                         x = NULL, 
                                         y = NULL)
                        )
           )

final_df <- do.call(rbind, df_list)
row.names(final_df) <- NULL

final_df 

#   id sum
# 1 14   5
# 2 15   6
# 3 16   7
# 4 17   8
# 5 18   9
...