【问题标题】:Dynamically (out of for loop) populate a dataframe with another dataframe with n-rows in r动态地(在 for 循环外)用另一个数据帧填充一个数据帧,在 r 中有 n 行
【发布时间】:2021-01-29 17:25:59
【问题描述】:

我在从某些电极的贝叶斯处理中提取的列表中有某些数据,我想从循环中填充数据帧。首先,我有一个包含 729 个处理结果的列表和一个对象elecs,如您所见,它基本上是一个包含 729 对电极 (27*27) 的列表。

> head(elecs)
  X Elec1 Elec2
1 1     1     1
2 2     1     2
3 3     1     3
4 4     1     4
5 5     1     5
6 6     1     6

问题是我想用这个循环的结果填充dataf1,它恰好是一个 4000 行的数据框。

dataf1 <- data.frame('Elec1'=rep(NA,4000*729),'Elec2'=rep(NA,4000*729),'int'=rep(NA,4000*729))

for (i in nrow(elecs)){
  Elec1=as.data.frame(rep(elecs[i,]$Elec1,4000))
  Elec2=as.data.frame(rep(elecs[i,]$Elec2,4000))
  post <- posterior_samples(bayeslist[[i]])
  int <- as.data.frame(post$b_Intercept)
  df <- cbind(Elec1,Elec2,est)
  colnames(df) <- c('Elec1','Elec2','int')
  
  dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int')] <- df

}

在循环中的最后一行之前一切正常:

dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int')] &lt;- df

而且我不知道为什么这不能按预期工作并填充 dataf1 预初始化数据帧。

一如既往,我们将高度赞赏任何见解。

【问题讨论】:

  • 你的最后一行有一个令人讨厌的错字,即你缺少一个右括号!而不是dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int'] &lt;- df,你应该有dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int')] &lt;- df。但我不确定这是唯一的错误。
  • 你是对的,但是不,这不是错误,我已经修复了它,但它仍然没有填充它。不过谢谢,我正在编辑帖子。

标签: r dataframe for-loop


【解决方案1】:

我意识到我错过了 for 中的 init,所以这是一个新手错字。除此之外,代码可以工作,以防有人想知道。

for (i in nrow(elecs)){ for (i in 1:nrow(elecs)){

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多