gpt4 book ai didi

r - 如何删除R中的重复项

转载 作者:行者123 更新时间:2023-12-04 22:34:09 25 4
gpt4 key购买 nike

我有一个非常大的数据集,如下所示:df <- data.frame(school=c("a", "a", "a", "b","b","c","c","c"), year=c(3,3,1,4,2,4,3,1), GPA=c(4,4,4,3,3,3,2,2))

school year GPA
a 3 4
a 3 4
a 1 4
b 4 3
b 2 3
c 4 3
c 3 2
c 1 2

我希望它看起来像:
school year GPA
a 3 4
a 3 4
b 4 3
c 4 3

所以基本上,我想要的是每个给定的学校,我想要他们的高年级学生(学生),不管 GPA 是多少。

我试过了:
new_df <- df[!duplicated(paste(df[,1],df[,2])),]但这给了我学校和年级之间的独特组合。

而下面的那个给了我独特的学校 new_df2 <- df[!duplicated(df$school),]

最佳答案

使用 plyr图书馆

require(plyr)
ddply(df,.(school),function(x){x[x$year==max(x$year),]})
> ddply(df,.(school),function(x){x[x$year==max(x$year),]})
school year GPA
1 a 3 4
2 a 3 4
3 b 4 3
4 c 4 3

或基地
test<-lapply(split(df,df$school),function(x){x[x$year==max(x$year),]})
out<-do.call(rbind,test)
> out
school year GPA
a.1 a 3 4
a.2 a 3 4
b b 4 3
c c 4 3

解释: split按学校将数据框拆分为列表。
dat<-split(df,df$school)

> dat
$a
school year GPA
1 a 3 4
2 a 3 4
3 a 1 4

$b
school year GPA
4 b 4 3
5 b 2 3

$c
school year GPA
6 c 4 3
7 c 3 2
8 c 1 2

对于每所学校,我们都希望成员名列前茅。
dum.fun<-function(x){x[x$year==max(x$year),]}

> dum.fun(dat$a)
school year GPA
1 a 3 4
2 a 3 4
lapply对列表的成员应用函数并输出列表
> lapply(split(df,df$school),function(x){x[x$year==max(x$year),]})
$a
school year GPA
1 a 3 4
2 a 3 4

$b
school year GPA
4 b 4 3

$c
school year GPA
6 c 4 3

这就是我们想要的,但是以列表的形式。我们需要将列表的成员绑定(bind)在一起。我们通过调用 rbind 来做到这一点。对成员先后使用 do.call .

关于r - 如何删除R中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11944402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com