查找列中的最大值及其在R中的行值(数据帧)

时间:2017-06-20 11:38:53

标签: r

我从本地目录导入了一个xlsx文件,这是一个HR记录文件。 它包含许多列,如部门,名称,名称,doj等。 如何找到薪水最高的每个部门的员工姓名?因此,每个部门的工资和员工姓名基本上都是最高工资。

编辑:我将展示我的例子:

> name<-c("Alex","May","Ross","Michael")
> salary<-c(1239,4818,10184,19310)
> department<-c("A","B","A","B")

> sample <- data.frame(name,salary,department)
> sample
 name salary department
1    Alex   1239         A
2     May   4818         B
3    Ross  10184         A
4 Michael  19310         B

我希望输出看起来像这样

name salary department
1    Ross   10184         A
2 Michael   19310         B

编辑: 我以前没有提到数据框,因此我得到了正确的输出问题。

3 个答案:

答案 0 :(得分:2)

请注意,在您的示例部门拼写错误。我使用了与您使用的拼写相同的拼写。

name<-c("Alex","May","Ross","Michael")
salary<-c(1239,4818,10184,19310)
deparment<-c("A","B","A","B")

sample <- data.frame(name,salary,deparment)

data=data.frame()
for (i in unique(deparment)) { 
  df=subset(sample, deparment == i)
  df=subset(df, salary == max(df$salary))
  data=rbind(data,df)
}
data

答案 1 :(得分:0)

dplyr应该在这里工作:

require(dplyr)

sample %>%
group_by(department) %>%
summarise(salary   = max(salary),
          name.max = name[salary == max(salary)])

这会获取样本并将其传递给group_bysummarise用于相应地对变量进行分组。然后我们找到max(salary)department找到每个group_by的名称(我们import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; import { AppComponent } from './app.component'; import { HeroDetailComponent } from './hero-detail.component'; import { HeroesComponent } from './heroes.component'; import { HeroService } from './hero.service'; @NgModule({ imports: [ BrowserModule, FormsModule, RouterModule.forRoot([ { path: 'heroes', component: HeroesComponent } ]) ], declarations: [ AppComponent, HeroesComponent, HeroDetailComponent ], providers: [ HeroService ], bootstrap: [ AppComponent ] }) export class AppModule { }

答案 2 :(得分:0)

Base R可以做到这一点:

sample[sample$salary==aggregate(sample$salary,by=list(deparment),max)$x,]

此处,aggregate函数标识每个部门的最高薪水,然后sample[sample$salary==...,]仅显示与薪资对应的表格行。如果一个部门的几个人有相同的薪水,那么他们就会全部出现。