繁体   English   中英

在 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调用中返回一个数据框by而不是单值向量,其中您的计算被呈现为一个新列,并且xy列都使用transform()删除,该函数用于操作列然后返回调整后的数据框。

然后,为了避免重复数据(因为您正在运行聚合),请将结果包装在unique() 最后,由于by将返回一个do.call(rbind, ...)数据帧的列表,因此在外部运行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM