【问题标题】:Sample random rows抽样随机行
【发布时间】:2020-07-14 09:28:53
【问题描述】:

我有一个数据集,其中有多个 ID,每个 ID 有两个观察值/值,例如:

 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

我发现随机抽样行以保留 ID 和与我可以使用的那些 ID 关联的观察数据的数据:

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

但是,我正在努力寻找一个函数来确保每个 ID 的两个度量都包含在随机样本中。最后,我想要一个由 16 个 ID 组成的随机样本,每个 ID 有两个观察值,总共 32 个观察值。有人可以帮忙吗?

【问题讨论】:

  • 感谢您的 cmets - 我已将输入数据的一部分添加到我的问题中。理想情况下,我希望输出采用相同的格式,只是作为一个子集。我希望这会有所帮助。
  • 我认为您要采样的行对超过 16 行,对吧?
  • 正确,我只是不允许泄露整个数据集!

标签: r random subset sampling


【解决方案1】:

您可以使用sample(unique(df$ID), 16) 对 16 个unique ID 进行采样。这些可用于使用%in%df 进行子集化。由于每个 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

数据:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 2018-11-13
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多