全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
10024 3
2016-08-11
现在需要按 “机构1”这个字段进行筛选,比如101200出现了两次,首先按照群组长度筛,保留群组长度大的,如果群组长度一样,则保留序号小的,也就是排在前面的。最后的结果见第二张表,求大神指导
1.png 2.png

二维码

扫码加我 拉你入群

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

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

全部回复
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
>


二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

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]),]
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群