R迭代数据集生成

如何解决R迭代数据集生成

我想基于存储在data.frames字符串中的21个参数,使用两个变量(使用mvrnorm生成21个随机正态分布[1:21] num/chr。另外,每个data.frame应该包含两列,每列的字符串对于21组中的每组都是相同的(一旦我将它们rbind一起使用,就有意义了)

假设 AGQ.mu2.mat 存储第一个变量的平均值(stddev = 1),存储 Std.mu2.mat 存储第二个变量(stddev = 20),和 ORIG ID 存储两个字符串(我用一些LotR名称替换了数据),然后将 corr 设置为.30和 n 始终为300:

r<-0.30
ORIG<-c("Ang","Ang","DGu","Har","Isg","Mor","MMo","Rhu","Rhu")
ID<-c("a","b","c","a","c")
AGQ.mu2.mat <- c(-1.06,-1.27,-1.97,-3.27,-3.32,-2.32,-1.05,-0.36,-1.85,-2.30,-2.49,-2.90,-0.80,-0.62,-0.56,1.22,1.62,0.44,-1.43,-1.08,-2.34)
Std.mu2.mat <- c(107,100,102,124,118,120,147,152,141,154,160,155,125,123,116,103,106,107,126,117)

我要迭代

dt<-data.frame(mvrnorm(n=300,mu=c(AGQ.mu2.mat[1],Std.mu2.mat[1]),Sigma=matrix(c(1,r*20,(20^2)),nrow=2),empirical=TRUE))
dt<-rename(dt,"AGQ" = "X1","Std" = "X2")
dt$Herkunft<-ORIG[1]
dt$Bat_ID<-ID[1]

在参数向量的所有21个条目上生成21个唯一命名的数据帧。

我尝试过

for (i in 1:21)
  {
dt<-data.frame(mvrnorm(n=300,mu=c(AGQ.mu2.mat[i],Std.mu2.mat[i]),"Std" = "X2")
dt$Herkunft<-ORIG[i]
dt$Bat_ID<-ID[i]
}

dt<-data.frame(mvrnorm(n=300,mu=c(rep(AGQ.mu2.mat,each=1),rep(Std.mu2.mat,each=1)),"Aggr" = "X1","Std" = "X2")
dt$Herkunft<-rep(ORIG,each=1)
dt$Bat_ID<-rep(ID,each=1)

无济于事;即使这样,也可以一遍又一遍地生成相同的数据集,而无需创建唯一命名的新数据集。

我非常感谢您提供任何有关迭代的帮助或方法。预先感谢!

解决方法

您需要使用某种方式来收集结果。我选择使用附加的list。其他解决方案可能是使用rbind。您必须使用nrow / ncol参数来调整矩阵形状。

library(MASS)

r<-0.30
ORIG<-c("Ang","Ang","DGu","Har","Isg","Mor","MMo","Rhu","Rhu")
ID<-c("a","b","c","a","c")

AGQ.mu2.mat <- 1:21
Std.mu2.mat <- 1:21

results <- list()

for (i in 1:21) {
dt<-data.frame(mvrnorm(n=300,mu=c(AGQ.mu2.mat[i],Std.mu2.mat[i]),Sigma=matrix(c(1,r*20,(20^2)),nrow = 2),empirical=TRUE))
colnames(dt) <- c("AGQ","Std")
dt$Herkunft<-ORIG[i]
dt$Bat_ID<-ID[i]

results[[i]] <- dt
}

加入所有结果

do.call(rbind,results)

验证:

> cor(results[[1]][,1:2]);apply(results[[1]][,1:2],2,mean);apply(results[[1]][,sd)
    AGQ Std
AGQ 1.0 0.3
Std 0.3 1.0
AGQ Std 
  1   1 
AGQ Std 
  1  20 
,

使用dplyrpurrr的解决方案可能会有所帮助...

library(MASS)
library(dplyr)
library(purrr)

r <-0.30

ORIG<-c("Ang","Rhu")

ID<-c("a","c")

AGQ.mu2.mat <- c(-1.06,-1.27,-1.97,-3.27,-3.32,-2.32,-1.05,-0.36,-1.85,-2.30,-2.49,-2.90,-0.80,-0.62,-0.56,1.22,1.62,0.44,-1.43,-1.08,-2.34)
Std.mu2.mat <- c(107,100,102,124,118,120,147,152,141,154,160,155,125,123,116,103,106,107,126,117)

listofdf <- purrr::map2(AGQ.mu2.mat,Std.mu2.mat,~ data.frame(MASS::mvrnorm(n = 300,mu=c(.x,.y),Sigma = matrix(c(1,nrow=2),empirical=TRUE))
) %>% 
   purrr::map2(ORIG,~ mutate(.x,Herkunft = .y)) %>%
   purrr::map2(ID,Bat_ID = .y))

head(listofdf[[4]])
#>          X1         X2 Herkunft Bat_ID
#> 1 0.4329040  17.616240      DGu      a
#> 2 2.6589457  -9.385099      DGu      a
#> 3 2.3626722   9.815020      DGu      a
#> 4 1.8998816 -24.551505      DGu      a
#> 5 0.2506713   0.792565      DGu      a
#> 6 3.4961960   8.112878      DGu      a


### since you mentioned binding them all together
onebigdf <- bind_rows(listofdf)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?