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 8.8706557 17.13532
BB 0 1.6339286 12.72830
BB 1 -0.1433333 13.68828", header = T)
我想dplyr
为每个pairing, male
组合创建一个模拟数据集,该数据集与该单元格具有相同的均值和标准差。因此,例如,如果我想为每个pairing, male
组合设置 300 行,我会执行以下操作:
tester = pilot_data %>% group_by(pairing, male) %>%
mutate(simulated_data = rnorm(mean = dv_mean, sd = dv_sd, n = 300))
除非由于回收错误,这显然不起作用。我可以使用 for 循环来执行此操作并一遍又一遍地将数据集附加到自身,但我正在尝试学习如何在 dplyr 链中执行此操作。
实现这一目标的最佳方法是什么?
解决方案
我们可以使用summarise
而不是mutate
assummarise
可以每组返回多于 1 行,而mutate
严格返回与length
原始行数相同的行
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
或者另一种选择是使用rowwise
,返回一list
列,然后unnest
(如果组有重复的行)
library(tidyr)
pilot_data %>%
rowwise %>%
mutate(simulated_data = list(rnorm(mean = dv_mean, sd = dv_sd,
n = 300))) %>%
unnest(c(simulated_data))
推荐阅读
- apache-spark - 创建一片 DStream 窗口
- javascript - Fancybox 在 Safari 上很难看到
- flask - 如何在 sqlalchemy 中左外连接?
- java - 如何检查仍在使用的线程或对象?
- ios - 使用 UIButton 的 z-order 将子层或 UIView 作为子视图添加到顶部仍然会落后于视图或看起来透明
- reactjs - 是否可以使用 eslint 验证组件使用的 propTypes
- c++ - Poco::ClassLoader 抛出 Poco::LibraryLoadException(无法加载库)
- ios - didReceiveMemoryWarning 从 UITableView 层次结构中删除单元格/视图
- javascript - 在服务器上有一个带有对象数组的 JSON 文件,并希望使用 fs.appendFile 将对象推送给它
- javascript - 如何使用 setInterval 和 CSS 样式更改文本动画?