2016-06-12 5 views
0

私は2600の要素レベルのデータフレームを持っています。データセットのバランスがよくない。データフレームからデータを切り取ってバランスを取るためにデータを切り取ります

enter image description here

私は1つの要因に5つの未満の出現を持っているすべてのエントリを削除したいと思います。また、5までの5回の出現をトリミングするようにしたいと思います。最終的には、全体的なエントリが少ないデータフレームを作成したいのですが、要素の人とのバランスが取れています。

次のようにデータセットが構築されています:

file_list <- list.files("path/to/image/folder", full.names=TRUE) 
# the folder contains 2600 images, which include information about the 
# person factor in their file name 

file_names <- sapply(strsplit(file_list , split = '_'), "[", 1) 
person_list <- substr(file_names, 1 ,3) 
person_class <- as.factor(person_list) 

imageWidth = 320; # uniform pixel width of all images 
imageHeight = 280; # uniform pixel height of all images 
variableCount = imageHeight * imageWidth + 2 

images <- as.data.frame(matrix(seq(count),nrow=count,ncol=variableCount)) 
images[1] <- person_class 
images[2] <- eyepos_class 

for(i in 1:count) { 
    img <- readJPEG(file_list[i]) 
    image <- c(img) 
    images[i, 3:variableCount] <- image 
} 

enter image description here

だから基本的に私はsummary(images[1])を使用しているときのように(因子レベルごとのサンプルの量を取得する必要があり、その後、データをトリミングするための操作を行いますセット 私は本当にここを開始する方法がわからないと、任意のヘルプがdplyrを使用して

+0

を使用してオプションのために私はあなたのデータは小さなではないことを知っているが、あなたupvotesと回答を得るでしょうどの再現性の良い質問を書き込むために、私たちができることを、再現含めてくださいコピー&ペーストしてデータ/問題を再現し、問題を再現してください。ビルトインのデータセットを使用するか、独自のデータセットを作成し、使用したコードを組み込むことができます。 –

+0

さて、私は再現性を高めるために最善を尽くしましたが、まだデータセットが必要になりました。一般公開されていますが、ダウンロード速度は遅いです。 – 4ndro1d

答えて

1

data.table

library(data.table) 
res <- setDT(images)[, if(.N > = 5) head(.SD, 5) , by = V1] 
+0

これは動作するようです(2639 - > 1090オブジェクトからデータセットを減らします)。ありがとう! – 4ndro1d

+0

なぜ、 'plot(res $ V1)'がそれに続いているのか分かりますが、 'plot(res [1])'はエラーを出します: 'plot.new()内のエラー:それは同じではありませんか? – 4ndro1d

+1

@ 4ndro1d 'data.table'の部分集合の列は少し異なります。' res $ V1'はベクトルです。 'res [[1]]'を使って、最初の列をベクトルとして得ることができます – akrun

1

を高く評価されています。

library(dplyr) 
group_by(images, V1) %>% # group by the V1 column 
    filter(n() >= 5) %>% # keep only groups with 5 or more rows 
    slice(1:5)   # keep only the first 5 rows in each group 

通常のように結果をオブジェクトに割り当てることができます。例my_desired_result = group_by(images, ...

+0

結果を変数に代入する必要はありますか?私は試しても結果は得られません。データフレームが変更されず、何かを変数に格納することもできません。しかし、それは私が探しているものに非常によく似ています。 – 4ndro1d

+0

obj_nameが必要です -

+0

私はこれを成功させようとしました – 4ndro1d

関連する問題