在 R 中使用函数 By 时,如何为每个组创建一个因子向量?

When using the function By in R, how do I create a vector of the factors for each group?

我在 R 中使用函数 "by" 最后,我想要一个包含因子的向量,因为我想创建一个数据框,其中包含我计算的内容和因子旁边是用于对该特定组进行子集化的函数。如何从输出中提取因子?设置如下

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

谢谢

考虑在您的 by 调用中 returning 一个数据框,而不是单值向量,其中您的计算呈现为一个新列并且 x并且 y 列全部使用 transform() 删除,操作列的函数然后 return 调整数据框。

然后,为避免重复数据(因为您正在 运行 聚合),将结果包装在 unique() 中。最后,由于by将return一个单行数据框的列表,运行一个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