R 尝试基于其他两列的唯一值保留一列的值
我想根据另外两列中的唯一值对,只保留df列中的两个最大值。e、 g.,我有一个df:R 尝试基于其他两列的唯一值保留一列的值,r,R,我想根据另外两列中的唯一值对,只保留df列中的两个最大值。e、 g.,我有一个df: df <- data.frame('ID' = c(1,1,1,2,2,3,4,4,4,5), 'YEAR' = c(2002,2002,2003,2002,2003,2005,2010,2011,2012,2008), 'WAGES' = c(100,98,60,120,80,300,50,40,30,500)); df您可以使用dp
df <- data.frame('ID' = c(1,1,1,2,2,3,4,4,4,5),
'YEAR' = c(2002,2002,2003,2002,2003,2005,2010,2011,2012,2008),
'WAGES' = c(100,98,60,120,80,300,50,40,30,500));
df您可以使用dplyr
的top\n
:
library(dplyr)
df %>%
group_by(ID) %>%
top_n(n = 2, wt = WAGES)
## A tibble: 8 x 3
## Groups: ID [5]
# ID YEAR WAGES
# <dbl> <dbl> <dbl>
#1 1 2001 100
#2 1 2002 98
#3 2 2002 120
#4 2 2003 80
#5 3 2005 300
#6 4 2010 50
#7 4 2011 40
#8 5 2008 500
库(dplyr)
df%>%
分组依据(ID)%>%
最高工资(n=2,wt=工资)
##一个tibble:8x3
##组别:ID[5]
#身份证年工资
#
#1 1 2001 100
#2 1 2002 98
#3 2 2002 120
#4 2 2003 80
#5 3 2005 300
#6 4 2010 50
#7 4 2011 40
#8 5 2008 500
如果我正确理解了您的问题,请使用base R:
for (i in 1:2) {
max_row <- which.max(df$WAGES)
df <- df[-c(max_row), ]
}
df
# ID YEAR WAGES
# 1 1 2001 100
# 2 1 2002 98
# 3 1 2003 60
# 4 2 2002 120
# 5 2 2003 80
# 7 4 2010 50
# 8 4 2011 40
# 9 4 2012 30
for(1:2中的i){
max_row按这些唯一对对进行排序。获取最高工资,并在移除最高工资后再次执行此操作。dF%%>%group_by(ID,YEAR)%%>%top_n(n=2,wt=工资)我明白你的意思了@H.Dave。在你的df
的情况下,这不起作用,因为年
每个ID
都有唯一的值。如果你用ID
更新你的数据,我可以更新我的。谢谢你,我也可以问你如何更改工资中的值吗?我想把最大的值取为100%,然后比较把另一个按百分比计算。谢谢