从另一个数据帧在dplyr中创建模拟数据帧
假设我有以下试点数据摘要:从另一个数据帧在dplyr中创建模拟数据帧,r,dplyr,R,Dplyr,假设我有以下试点数据摘要: pilot_data = read.table(text = "pairing male dv_mean dv_sd AA 0 1.4377551 11.99576 AA 1 0.1745918 10.03553 AB 0 12.6574286 17.76540 AB 1 9.5337037 13.92486 BA 0 8.8971111 16.49538 BA 1
pilot_data = read.table(text = "pairing male dv_mean dv_sd
AA 0 1.4377551 11.99576
AA 1 0.1745918 10.03553
AB 0 12.6574286 17.76540
AB 1 9.5337037 13.92486
BA 0 8.8971111 16.49538
BA 1 8.8706557 17.13532
BB 0 1.6339286 12.72830
BB 1 -0.1433333 13.68828", header = T)
我想在dplyr
中为每个配对的男性组合创建一个模拟数据集,该组合与该单元格具有相同的平均值和标准偏差。因此,例如,如果我想为每个配对、男性组合有300行,我会这样做:
tester = pilot_data %>% group_by(pairing, male) %>%
mutate(simulated_data = rnorm(mean = dv_mean, sd = dv_sd, n = 300))
但由于回收错误,这显然不起作用。我可以使用for循环来实现这一点,并将数据集一次又一次地附加到自身,但我正在尝试学习如何在dplyr链中实现这一点
实现这一点的最佳方法是什么?我们可以使用摘要
而不是变异
,因为摘要
可以返回每组超过1行,而变异
严格要求返回与原始行数相同的长度
library(dplyr)
pilot_data %>%
group_by(pairing, male) %>%
summarise(simulated_data = rnorm(mean = dv_mean,
sd = dv_sd, n = 300), .groups = 'drop')
注意:另外,每组的行数都是1。因此,它之所以有效,是因为rnorm
要求mean
,sd
或者另一个选项是使用行方式
,返回列表
列,然后返回unest
(以防组中存在重复的行)
我们可以使用summary
而不是mutate
,因为summary
可以返回每组超过1行,而mutate
严格要求返回与原始行数相同的长度
library(dplyr)
pilot_data %>%
group_by(pairing, male) %>%
summarise(simulated_data = rnorm(mean = dv_mean,
sd = dv_sd, n = 300), .groups = 'drop')
注意:另外,每组的行数都是1。因此,它之所以有效,是因为rnorm
要求mean
,sd
或者另一个选项是使用行方式
,返回列表
列,然后返回unest
(以防组中存在重复的行)
这是一个数据表
选项
> setDT(pilot_data)[, .(simulated_data = rnorm(300, dv_mean, dv_sd)), .(pairing, male)]
pairing male simulated_data
1: AA 0 -11.068416
2: AA 0 -4.925878
3: AA 0 -11.044629
4: AA 0 -7.946300
5: AA 0 3.352702
---
2396: BB 1 8.966713
2397: BB 1 -14.925273
2398: BB 1 -11.957720
2399: BB 1 17.335359
2400: BB 1 17.824735
这是一个数据表
选项
> setDT(pilot_data)[, .(simulated_data = rnorm(300, dv_mean, dv_sd)), .(pairing, male)]
pairing male simulated_data
1: AA 0 -11.068416
2: AA 0 -4.925878
3: AA 0 -11.044629
4: AA 0 -7.946300
5: AA 0 3.352702
---
2396: BB 1 8.966713
2397: BB 1 -14.925273
2398: BB 1 -11.957720
2399: BB 1 17.335359
2400: BB 1 17.824735
@别担心,我的朋友!我只想为这个问题做点贡献:)@akrun别担心,我的朋友!我只想对这个问题做点贡献:)