楼主: ㄣ雨珩碸啉
10062 3

[问答] R语言按条件筛选数据 [推广有奖]

  • 0关注
  • 0粉丝

高中生

52%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
135 点
帖子
21
精华
0
在线时间
27 小时
注册时间
2012-8-15
最后登录
2017-3-20

楼主
ㄣ雨珩碸啉 发表于 2016-8-11 09:27:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在需要按 “机构1”这个字段进行筛选,比如101200出现了两次,首先按照群组长度筛,保留群组长度大的,如果群组长度一样,则保留序号小的,也就是排在前面的。最后的结果见第二张表,求大神指导
1.png 2.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:条件筛选 筛选数据 R语言 机构

回帖推荐

cmwei333 发表于2楼  查看完整内容

代码部分: # reproduce your data, igoring the last 2 columns c1

沙发
cmwei333 发表于 2016-8-11 10:05:24
代码部分:
# reproduce your data, igoring the last 2 columns
c1 <- c(1:12)
c2 <- rep(5,12)
c2[7:8] <- 6
c3 <- c(23,23,21,20,20,19,rep(16,4),15,15)
c4 <- rep(101100,12)
c4[1:2] <- 101200
c4[c(7,11,12)] <- 105800
c4[8] <- 101700
data <- matrix(c(c1,c2,c3,c4),ncol=4)


# selection procedure
c4sel <- unique(data[,4])
vecf <- NULL  # initiate final selected data in vector form
for(i in 1:length(c4sel)){
        sel1 <- data[data[,4]==c4sel,]
        if (!is.vector(sel1)){
                sel2 <- sel1[sel1[,3]==max(sel1[,3]),]
                if (!is.vector(sel2)){
                        sel3 <- sel2[sel2[,1]==min(sel2[,1]),]
                        vecf <- c(vecf,sel3)
                } else {
                        vecf <- c(vecf,sel2)
                }
        } else {
                vecf <- c(vecf,sel1)
        }       
}
dataf <- matrix(vecf,ncol=4,byrow=T)


运行结果:
> # reproduce your data, igoring the last 2 columns
> c1 <- c(1:12)
> c2 <- rep(5,12)
> c2[7:8] <- 6
> c3 <- c(23,23,21,20,20,19,rep(16,4),15,15)
> c4 <- rep(101100,12)
> c4[1:2] <- 101200
> c4[c(7,11,12)] <- 105800
> c4[8] <- 101700
> data <- matrix(c(c1,c2,c3,c4),ncol=4)
> data
      [,1] [,2] [,3]   [,4]
[1,]    1    5   23 101200
[2,]    2    5   23 101200
[3,]    3    5   21 101100
[4,]    4    5   20 101100
[5,]    5    5   20 101100
[6,]    6    5   19 101100
[7,]    7    6   16 105800
[8,]    8    6   16 101700
[9,]    9    5   16 101100
[10,]   10    5   16 101100
[11,]   11    5   15 105800
[12,]   12    5   15 105800
>
> # selection procedure
> c4sel <- unique(data[,4])
> vecf <- NULL  # initiate final selected data in vector form
> for(i in 1:length(c4sel)){
+ sel1 <- data[data[,4]==c4sel,]
+ if (!is.vector(sel1)){
+ sel2 <- sel1[sel1[,3]==max(sel1[,3]),]
+ if (!is.vector(sel2)){
+ sel3 <- sel2[sel2[,1]==min(sel2[,1]),]
+ vecf <- c(vecf,sel3)
+ } else {
+ vecf <- c(vecf,sel2)
+ }
+ } else {
+ vecf <- c(vecf,sel1)
+ }
+ }
> dataf <- matrix(vecf,ncol=4,byrow=T)
> dataf
     [,1] [,2] [,3]   [,4]
[1,]    1    5   23 101200
[2,]    3    5   21 101100
[3,]    7    6   16 105800
[4,]    8    6   16 101700
>


已有 1 人评分论坛币 热心指数 收起 理由
admin_kefu + 30 + 2 热心帮助其他会员

总评分: 论坛币 + 30  热心指数 + 2   查看全部评分

bbs.pinggu.org/forum.php?mod=collection&action=view&ctid=3257
bbs.pinggu.org/forum.php?mod=collection&action=view&ctid=3258
bbs.pinggu.org/forum.php?mod=collection&action=view&ctid=3259

藤椅
ㄣ雨珩碸啉 发表于 2016-8-11 10:33:21
cmwei333 发表于 2016-8-11 10:05
代码部分:
# reproduce your data, igoring the last 2 columns
c1
我靠,只能膜拜啊,大神

板凳
好人3805 发表于 2016-8-11 14:09:39
假设你的data=d
d1 = d[order(d$机构1,d$群组长度,d$序号,decreasing=c(F,T,F)),]
last=0
index=1
result=0
for(i in 1:nrow(d1)){
cur = d1[i,4]
if(cur!=last)
{
result[index]=i
index = index + 1
last = cur
}
}
d2=d1[result,]
d2[order(d2[,1]),]
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 20:53