簡體   English   中英

在R中對數據進行分組,包括那些不在分組條件下的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM