Выборка случайных строк - PullRequest
0 голосов
/ 14 июля 2020

У меня есть набор данных, в котором есть несколько идентификаторов, каждый из которых имеет два наблюдения / значения, например:

 ID           Test   Behaviour     
 A12.4.2      ONE     8.64      
 A12.4.2      TWO     7.63      
 A6.3.3       ONE     1.81      
 A6.3.3       TWO     2.47      
 B12.4.1      ONE     1.17      
 B12.4.1      TWO     3.96      
 E9.4.2       ONE     13.04     
 E9.4.2       TWO     9.51

Я обнаружил, что для случайной выборки строк для сохранения данных как для идентификаторов, так и для данные наблюдения, связанные с теми идентификаторами, которые я могу использовать:

df[sample(nrow(df), 32), ]

Однако я изо всех сил пытаюсь найти функцию, которая гарантирует, что две меры для каждого идентификатора включены в случайный образец. В конце концов, я хотел бы случайную выборку, состоящую из 16 идентификаторов с двумя наблюдениями в каждом, всего 32 наблюдения. Кто-нибудь может помочь?

1 Ответ

2 голосов
/ 14 июля 2020

Вы можете выбрать 16 unique ID с sample(unique(df$ID), 16). Их можно использовать для подмножества df , используя %in%. Поскольку у вас есть два наблюдения / значения на ID , это даст вам 32 строки, содержащие оба наблюдения ID .

df[df$ID %in% sample(unique(df$ID), 16),]
#   x ID
#1  1  A
#2  2  A
#5  1  C
#6  2  C
#7  1  D
#8  2  D
#11 1  F
#12 2  F
#15 1  H
#16 2  H
#19 1  J
#20 2  J
#21 1  K
#22 2  K
#23 1  L
#24 2  L
#31 1  P
#32 2  P
#33 1  Q
#34 2  Q
#39 1  T
#40 2  T
#43 1  V
#44 2  V
#45 1  W
#46 2  W
#47 1  X
#48 2  X
#49 1  Y
#50 2  Y
#51 1  Z
#52 2  Z

Data:

df <- expand.grid(x=1:2, ID=LETTERS)
...