簡體   English   中英

如何處理R中大型數據集中符合特定條件的數據

[英]How to deal with data matching specific criteria in a large dataset in R

我在R中有一個大數據集(120萬條記錄)。 這些是不同協議的一些讀數。 現在,我想對這些數據進行分類(可以使用rpart / RWeka進行分類)。 但是,我首先需要處理數據,而這個問題正是關於此的。

數據集由每組控制參數的一對輸出(吞吐量,響應時間)組成,適用於4種不同的協議。 現在,我想“合並”這些值,並為每組控制參數只選擇最大吞吐量的10%(對於該組輸入參數)和最小響應時間的10%的協議。

我知道我可以使用聚合在另一個data.frame中找到最大吞吐量,最小響應時間,然后將其與原始data.frame合並。 然后,我可以使用ifelse查找那些符合條件的協議名稱。 但是,在我看來,這是低效的,而且我不知道如何在單個列中編碼多個匹配項(每組輸入值)。

有什么建議么?

示例(REQS和REPS是輸入參數):

PROTO  REQS  REPS  THR  RT
A      8     8     10   1
B      8     8     9.5  2
C      8     8     7    1.1
A      16    8     10   4
B      16    8     5    1
C      16    8     1    0.5
A      8     16    8    1
B      8     16    10   1.09
C      8     16    9.5  1

應該產生如下內容:

REQS REPS THRGOOD RTGOOD BOTHGOOD
8    8    A,B     A,C    A
16   8    A       C      empty
8    16   B,C     A,B,C  B,C

ddplyplyr包應該是你的朋友在這里。

首先,編寫一個函數,如果要獲取僅包含一組輸入參數行的data.frame,則該函數將為您提供所需的結果:

forOneSet<-function(dfr)
{
  THRlim<-0.9*max(dfr$THR) #is this what you want - adapt if needed?
  RTlim<-0.1*min(dfr$RT) #is this what you want - rather unlikely - adapt if needed?
  thrgood<-dfr$PROTO[dfr$THR > THRlim]
  rtgood<-dfr$PROTO[dfr$RT < RTlim]
  bothgood<-union(thrgood, rtgood)
  #return a data.frame with the wanted results for this 'partial' data.frame
  data.frame(REQS=dfr$REQS[1], REPS=dfr$REPS[1], THRGOOD=paste(thrgood, collapse=","), RTGOOD=paste(rtgood, collapse=","), BOTHGOOD=paste(bothgood, collapse=","))
}

現在您可以立即使用ddply (我假設您的原始data.frame稱為orgdfr):

result<-ddply(orgdfr, .(REQS, REPS), forOneSet)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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