0

これにタイトルを付ける方法がわからなかったので、変更してください:)

このようなデータがあり、V5に値が複数あるようにトリミングしたい場合は、V4の値が最も高い行のみを保持します。たとえば、V5 = 7200の場合、行ID25と行ID20がありますが、V4の方が高いため、行ID20のみを保持します。

      V4   V5
29  9.94 5900
28 10.56 5100
27 11.34 6200
26 11.42 8300
25 13.16 7200
24 13.78 7500
23 14.16 6200
22 14.26 7500
21  14.6 7400
20 14.64 7200
19 15.86 8800

に:

      V4   V5
29  9.94 5900
28 10.56 5100
26 11.42 8300
23 14.16 6200
22 14.26 7500
21  14.6 7400
20 14.64 7200
19 15.86 8800

これをベクトル化された方法で行う方法はありますか、それとも賢いショートカットがありますか?多くの異なる行列に対してそれを行わなければならない場合、単純な構造(forループなど)では時間がかかる可能性があります。

4

2 に答える 2

2
df<-read.table(header=T,text="      V4   V5
29  9.94 5900
28 10.56 5100
27 11.34 6200
26 11.42 8300
25 13.16 7200
24 13.78 7500
23 14.16 6200
22 14.26 7500
21  14.6 7400
20 14.64 7200
19 15.86 8800")


df1<-df[with(df,order(V4,decreasing=T)),]
df1<-df1[!duplicated(df1$V5),]
> df1
      V4   V5
19 15.86 8800
20 14.64 7200
21 14.60 7400
22 14.26 7500
23 14.16 6200
26 11.42 8300
28 10.56 5100
29  9.94 5900

df1<-df1[with(df1,order(V4)),] # if your order is important

> df1
      V4   V5
29  9.94 5900
28 10.56 5100
26 11.42 8300
23 14.16 6200
22 14.26 7500
21 14.60 7400
20 14.64 7200
19 15.86 8800
于 2012-08-21T05:08:10.930 に答える
1
df <- data.frame(V4=c(9,10,11,12,13,14,15,16),V5=c(1,2,3,3,4,5,6,6))

df
  V4 V5
1  9  1
2 10  2
3 11  3
4 12  3
5 13  4
6 14  5
7 15  6
8 16  6

df2 <- aggregate(list(V4=df$V4),by=list(V5=df$V5),function(x){max(x)})

df2
  V5 V4
1  1  9
2  2 10
3  3 12
4  4 13
5  5 14
6  6 16
于 2012-08-21T05:12:18.767 に答える