[英]Grouping data in R with including those attributes that are not on grouping condition
我想對數據進行分組,以便包含那些未包含在分組條件中的屬性。 示例數據
pixel740 label num
1 0 0 4132
2 0 1 4684
3 0 2 4177
4 1 7 4
5 1 9 1
6 2 7 11
7 2 9 6
8 3 7 10
9 3 9 4
結果我想要的數據
pixel740 label num
0 1 4684 // this is as4684 is max num , so i include the row
1 7 4
2 7 11
3 7 10
即我想根據pixel740屬性包含那些具有最大數量的行
我嘗試了ddply,拆分選項,但它們總是包含我們用來分組的屬性,即像素740,不包括整行
這個怎么做? 有沒有可以做到這一點的功能或我使用我想避免的循環
以下是如何使用aggregate
pixel740
每個值的最大num
值(調用原始數據x
):
aggregate(num ~ pixel740, data=x, FUN=max)
## pixel740 num
## 1 0 4684
## 2 1 4
## 3 2 11
## 4 3 10
要獲取行,您可以與原始集合merge
:
ag <- aggregate(num ~ pixel740, data=x, FUN=max)
res <- merge(ag, x)
res
## pixel740 num label
## 1 0 4684 1
## 2 1 4 7
## 3 2 11 7
## 4 3 10 7
根據評論中的要求,以下是如何按pixel740
的值對數據進行排序:
res[order(res$pixel740),]
對於這個簡短的例子,輸出沒有區別。
我一直在嘗試使用data.table來制定解決方案,我相信這是結果。 我想它可以改進。
require("data.table")
DT <- data.table(read.table("clipboard", header=T))
DT2 <- DT[, list(max_num = max(num)), by="pixel740"]
setkey(DT,num,pixel740)
setkey(DT2,max_num,pixel740)
RES <- DT[DT2,j=list(label)]
setkey(RES,pixel740)
RES
num pixel740 label
1: 4684 0 1
2: 4 1 7
3: 11 2 7
4: 10 3 7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.