r - 在 R 中为每个唯一 ID 选择随机点
问题描述
我之前的一个问题与这个非常相似。
让我们创建这个随机数据集-
df<- data.frame(ani_id = as.factor(1:10), x_data = rnorm(500), y_data=rnorm(500))
> head(df)
ani_id x_data y_data
1 1 -0.8832187 0.5080067
2 2 -0.2823767 -0.4060133
3 3 -1.5890646 -1.3499005
4 4 1.8312746 1.0803899
5 5 1.5814911 0.1227741
6 6 1.6500048 -0.2849130
我有唯一的 ID 1 到 10。还有另外 2 个带有 x 和 y 轴数据的列。
我需要的是每个 ID 5 个随机点。
我尝试过的是-
df_sub<- do.call(rbind, by(df, df$ani_id, head, 5))
这会给我每个 ID 的前 5 分,而不是随机的。我知道我可以使用样本,但是当我使用样本时,我从 df 获得 5 个随机点,而不是每个 ID 获得 5 个随机点。
我知道这是非常基本的,但我真的无法解决这个问题。
任何帮助都非常受欢迎。:)
解决方案
您可以使用动词(数据子集data.table
)按组应用函数。在您的情况下,您想进行采样,比如说替换.SD
df <- data.frame(ani_id = as.factor(1:10), x_data = rnorm(500), y_data=rnorm(500))
library(data.table)
setDT(df)
df[, lapply(.SD, sample, .N, size = 5), by = "ani_id"]
.N
这里是说我们在 1 和组中的观察次数之间进行采样。
输出:
ani_id x_data y_data
1: 1 0.81210424 -0.43155131
2: 1 -1.14088114 1.58057721
3: 1 0.06865298 0.66988620
4: 1 -1.60254398 1.15035575
5: 1 -0.36304871 0.66988620
6: 2 0.95519426 -0.55430457
7: 2 0.53378403 -0.10214398
8: 2 -0.94015859 -1.12178243
9: 2 -0.94015859 -0.54368006
10: 2 1.10156682 -1.55819890
11: 3 -0.66934194 1.20712519
12: 3 -0.45282335 1.42100642
13: 3 0.20274374 -0.92261343
14: 3 -0.89429015 -0.08322267
15: 3 -0.45282335 -0.76849105
16: 4 -0.33635193 0.32739748
17: 4 -0.51244630 1.04049548
18: 4 -0.51244630 0.14979289
19: 4 0.48511418 0.13926790
20: 4 2.03382889 1.51772346
21: 5 0.67217967 -1.42806565
22: 5 2.20230044 0.12381176
23: 5 1.47995961 -0.71651449
24: 5 0.15592027 1.00399878
25: 5 -2.04760590 -0.08162096
26: 6 -0.70265235 -0.24097530
27: 6 0.04863560 1.24983393
28: 6 0.56252090 -0.86735582
29: 6 -0.44686943 1.45452967
30: 6 -0.16262549 -0.01227861
31: 7 -0.25934089 1.25422436
32: 7 -0.17041086 -0.03984203
33: 7 0.94523241 -0.39190371
34: 7 -0.46559718 1.57288706
35: 7 0.29093588 -1.11361543
36: 8 2.03011563 -0.84065967
37: 8 0.04606141 -1.09644922
38: 8 -2.07313897 -1.10129398
39: 8 -0.18617530 -0.83920602
40: 8 0.77031457 0.96516086
41: 9 0.45411183 -1.10877598
42: 9 -0.98211896 0.10769514
43: 9 -2.59020795 -1.43687674
44: 9 0.35394471 0.31910079
45: 9 -0.63453267 -2.15948240
46: 10 -0.41591389 -1.96997799
47: 10 -0.18099801 -0.75883730
48: 10 -0.18099801 1.06453895
49: 10 0.47289655 -1.76546082
50: 10 -0.35131470 -1.46599203
ani_id x_data y_data
推荐阅读
- mysql - 主题先决条件的 SQL 查询
- c++ - 创建一个以自定义对象为键的 unordered_map
- delphi - 如何自动将范围名称添加到delphi库单元?
- timetable - 比较两个不同时间表的两个讲座时段
- python-3.x - 使用python在for循环中减去交替行的日期时间列
- swift - Swift 协议和扩展,如果存在,我需要调用实例方法
- python - 如何为 Django 模型提供 API 密钥
- python-3.x - 无法从 Python 3.x 中的文件中读取二进制矩阵
- c - 在 C 中,我的程序输出不在用户输入数组内的数字或不输出数组中任何数字之和的程序没有打印任何内容
- javascript - 如何在 IF ELSE 上设置文本以更改颜色导致带有 javascript 的 Thingsboard 小部件?