如何为列值的随机样本选择所有行?
我有一个如下所示的数据框:
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))
我需要创建一个包含上述数据帧中所有行的数据帧,用于两个随机采样的标记。假设标签R007和M942随机选中,我的新数据框需要如下所示:
tag weight
R007 10
R007 11
R007 9
M942 3
我该怎么做?
我知道我可以创建一个包含两个随机标签的列表:
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
但我只是不知道如何使用它来对我的原始数据帧进行子集化。
答案 0 :(得分:7)
这就是你想要的吗?
subset(weights_df, tag%in%sample(levels(tag),2))
答案 1 :(得分:2)
如果您的data.frame名为dfrm
,那么这将选择100个随机tag
s
dfrm[ sample(NROW(dfrm), 100), "tag" ] # possibly with repeats
另一方面,如果您想要一个具有相同列的数据帧(可能包含重复):
samp <- dfrm[ sample(NROW(dfrm), 100), ] # leave the col name entry blank to get all
第三种可能性......您需要随机获得100个不同的标签,但不是根据频率加权的概率:
samp.tags <- unique(dfrm$tag)[ sample(length(unique(dfrm$tag)), 100]
编辑:修改问题;其中之一:
subset(dfrm, tag %in% c("R007", "M942") )
或者:
dfrm[dfrm$tag %in% c("R007", "M942"), ]
或者:
dfrm[grep("R007|M942", dfrm$tag), ]