5

列値のランダムサンプルのすべての行を選択するにはどうすればよいですか?

次のようなデータフレームがあります。

tag  weight

R007     10
R007     11
R007      9
J102     11
J102      9
J102     13
J102     10
M942      3
M054      9
M054     12  
V671     12
V671     13
V671      9
V671     12
Z990     10
Z990     11

を使用して複製できること...

weights_df <- structure(list(tag = structure(c(4L, 4L, 4L, 1L, 1L, 1L, 1L, 
3L, 2L, 2L, 5L, 5L, 5L, 5L, 6L, 6L), .Label = c("J102", "M054", 
"M942", "R007", "V671", "Z990"), class = "factor"), value = c(10L, 
11L, 9L, 11L, 9L, 13L, 10L, 3L, 9L, 12L, 12L, 14L, 5L, 12L, 11L, 
15L)), .Names = c("tag", "value"), class = "data.frame", row.names = c(NA, 
-16L))

ランダムにサンプリングされた2つのタグについて、上記のデータフレームのすべての行を含むデータフレームを作成する必要があります。タグR007とM942がランダムに選択されたとしましょう。私の新しいデータフレームは、次のようになります。

tag  weight

R007     10
R007     11
R007      9
M942      3

どうすればよいですか?

次のような2つのランダムタグのリストを作成できることはわかっています。

library(plyr)
tags <- ddply(weights_df, .(tag), summarise, count = length(tag))
set.seed(5464)
tag_sample <- tags[sample(nrow(tags),2),]
tag_sample

その結果...

   tag count
4 R007     3
3 M942     1

しかし、それを使用して元のデータフレームをサブセット化する方法がわかりません。

4

2 に答える 2

7

これは、あなたの望むことですか?

subset(weights_df, tag%in%sample(levels(tag),2))
于 2011-05-10T01:54:07.037 に答える
2

data.frameに名前が付けられている場合、これにより100個のdfrmランダムなが選択されますtag

dfrm[ sample(NROW(dfrm), 100), "tag" ]   # possibly with repeats

一方、同じ列(場合によっては繰り返し)のデータフレームが必要な場合:

samp <- dfrm[ sample(NROW(dfrm), 100),  ]  # leave the col name entry blank to get all

3番目の可能性...ランダムに100個の個別のタグが必要ですが、頻度に重み付けされた確率ではありません。

samp.tags <- unique(dfrm$tag)[ sample(length(unique(dfrm$tag)), 100]

編集:改訂された質問へ; これらの1つ:

 subset(dfrm, tag %in% c("R007", "M942") )

または:

dfrm[dfrm$tag %in% c("R007", "M942"), ]

または:

dfrm[grep("R007|M942", dfrm$tag), ]
于 2011-05-10T00:32:38.377 に答える