如何解决一个向量中特定对象的另一个向量中的第二个最大值
我有一个非常大的数据框架,其中包含投资者,公司和股票。每个公司都有多个投资者,我希望有一个第四个向量,该向量具有每个公司的投资者第二大股票的价值。 为了展示我使用的最大投资者:
df$bigInv <- aggregate(df$InvShare ~ df$Company,df,max)
这是我的数据框的一个示例: enter image description here
解决方法
可重复性数据
df <- data.frame(id = c(1,2,3,4,5,6,7,8),Investor.Name = c("Shigeo Kageyama","Shigeo Kageyama","Arataka Reigen","Ritsu Kageyama","Tenga Onigawara"),Company = c("Body Improvement Club","Salt Middle School","Spirits Consultation ","Pepper Middle School","Tofu Spirits School","Psycho Helmet Cult","Chess Club","Lecture Club"),InvShare = c(
0.45,0.12,0.89,0.541,0.15,0.75,0.14,0.1))
df
# id Investor.Name Company InvShare
# 1 1 Shigeo Kageyama Body Improvement Club 0.450
# 2 2 Shigeo Kageyama Salt Middle School 0.120
# 3 3 Arataka Reigen Spirits Consultation 0.890
# 4 4 Arataka Reigen Pepper Middle School 0.541
# 5 5 Ritsu Kageyama Tofu Spirits School 0.150
# 6 6 Ritsu Kageyama Psycho Helmet Cult 0.750
# 7 7 Ritsu Kageyama Chess Club 0.140
# 8 8 Tenga Onigawara Lecture Club 0.100
以下代码将为您提供每个公司中第二大投资者的姓名。
#The second of the list of affiliation
second = function(x) {
if (length(x) == 1)
return(x)
return(sort(x,decreasing = TRUE)[2])}
aggregate(x = list( InvShare = df$InvShare),by= list(second_member =df$Investor.Name),FUN=second)
# second_member InvShare
# 1 Arataka Reigen 0.541
# 2 Ritsu Kageyama 0.150
# 3 Shigeo Kageyama 0.120
# 4 Tenga Onigawara 0.100
这就是您要搜索的内容吗
[已编辑]
我刚刚意识到您想要在data.frame上的第四列。以下行将完成此操作:
df$second <- ave(x = df$InvShare,by = df$Investor.Name,FUN = second)
df
# id Investor.Name Company InvShare second
# 1 1 Shigeo Kageyama Body Improvement Club 0.450 0.120
# 2 2 Shigeo Kageyama Salt Middle School 0.120 0.120
# 3 3 Arataka Reigen Spirits Consultation 0.890 0.541
# 4 4 Arataka Reigen Pepper Middle School 0.541 0.541
# 5 5 Ritsu Kageyama Tofu Spirits School 0.150 0.150
# 6 6 Ritsu Kageyama Psycho Helmet Cult 0.750 0.150
# 7 7 Ritsu Kageyama Chess Club 0.140 0.150
# 8 8 Tenga Onigawara Lecture Club 0.100 0.100
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。