你好,我希望这不是一个重复的问题,但可能是一个非常简单的问题。我找不到答案,我不能自己解决。
我有一个类似下面的数据框,我需要在每个“id_lote”中随机选择一行。 “id_pix”是唯一的,但重复“id_lote”并且组(id_lote)的大小不同。我的结果应该是一个子集数据帧,其中许多行作为id_lote但随机选择。我正在使用示例命令进行其他随机选择但我无法使其适用于此问题。如果我使用唯一命令它不会是一个随机子集... 提前谢谢!
id_pix id_lote clase f1 f2
45 4 Sg 2460 2401
46 4 Sg 2620 2422
47 4 Sg 2904 2627
48 5 M 2134 2044
49 5 M 2180 2104
50 5 M 2127 2069
83 11 S 2124 2062
84 11 S 2189 2336
85 11 S 2235 2162
86 11 S 2162 2153
87 11 S 2108 2124
答案 0 :(得分:3)
只有基数R,您可以使用ave
例如:
> DF[!!ave(seq_along(DF$id_lote), DF$id_lote, FUN=function(x) sample(x, 1) == x),]
#id_pix id_lote clase f1 f2
#3 47 4 Sg 2904 2627
#6 50 5 M 2127 2069
#7 83 11 S 2124 2062
或者使用dplyr,您可以使用sample_n
:
library(dplyr)
> DF %>% group_by(id_lote) %>% sample_n(1)
#Source: local data frame [3 x 5]
#Groups: id_lote
#
#id_pix id_lote clase f1 f2
#1 46 4 Sg 2620 2422
#2 48 5 M 2134 2044
#3 85 11 S 2235 2162
答案 1 :(得分:2)
data.table
在这里效果很好
library(data.table)
setDT(data) #Convert data to a data.table
data[, .SD[sample(1:.N,1)], by=.(id_lote)]
答案 2 :(得分:1)
within(df[sample(1:nrow(df), size = nrow(df)), ], !duplicated(id_lote))