R 组内随机选择

R 组内随机选择,r,R,你好,我希望这不是一个重复的问题,但可能是一个非常简单的问题。我找不到答案,也无法自己解决 我有一个如下所示的数据帧,我需要在每个“id\u lote”中随机选择一行。“id_pix”是唯一的,但“id_lote”是重复的,组的大小(id_lote)是不同的。我的结果应该是一个子集数据帧,其中有许多行作为id\u lote,但随机选择。我正在对其他随机选择使用sample命令,但我无法使其适用于此问题。如果我使用unique命令,它将不是一个随机子集。。。 提前谢谢 id_pix id_lote

你好,我希望这不是一个重复的问题,但可能是一个非常简单的问题。我找不到答案,也无法自己解决

我有一个如下所示的数据帧,我需要在每个“id\u lote”中随机选择一行。“id_pix”是唯一的,但“id_lote”是重复的,组的大小(id_lote)是不同的。我的结果应该是一个子集数据帧,其中有许多行作为id\u lote,但随机选择。我正在对其他随机选择使用sample命令,但我无法使其适用于此问题。如果我使用unique命令,它将不是一个随机子集。。。 提前谢谢

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

data.table
在这里工作得很好

library(data.table)
setDT(data) #Convert data to a data.table

data[,.SD[sample(1.N,1)],by=(id\u lote)]

仅使用基数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

对于
ave
。;-)也有同样的想法我也尝试了这个:prueba dim(prueba)[1]17451 26,但是结果的维数应该是2080 26,因为我在这个DF中有2080 id。我不想让它变长,因为我的问题用dplyr pakcage解决了。我是新来的,我不知道问答系统。。。随便说谢谢谢谢!我必须更新我的R版本,但是dplyr包很棒!它对我的问题非常有效
within(df[sample(1:nrow(df), size = nrow(df)), ], !duplicated(id_lote))