首页 > 解决方案 > 通过复制行来“增长”数据框

问题描述

我正在尝试校准模型,我需要改变一些参数来查看输出的行为。为此,我想创建一个数据框,其中每一行都是一组参数。
一个示例数据集:

pars <- data.frame(a=3, b=4, c=5)

改变参数a

dfa <- data.frame(a = 1:6)

然后尝试将其加入一个新的数据框中:

bind_cols(dfa, pars[rep(seq_len(nrow(pars)), each=length(a)),])  

同样的过程也适用于b.

dfb <- data.frame(b = 3:6)

dfb <- 
  bind_cols(dfb, pars[rep(seq_len(nrow(pars)), each=length(dfb$b)),]) %>% 
  select(-c(b1))

bind_rows(dfa,dfb)

对于大约 30 个参数的模型,这不是一种非常有效的方法。我猜这应该放入某种循环中。我可能不是第一个尝试这样做的人,所以如果有人已经这样做了,我将不胜感激。类似问题的一些答案是this,我已将其用作尝试的一部分。这个评论也很有趣,因为我有不同数量的行要重复:

n.times <- c(2,4) ; df[rep(seq_len(nrow(df)), n.times),] 

对此的任何帮助表示赞赏。

标签: r

解决方案


由于 R 默认填充列,因此前两个示例只需要

data.frame(dfa, pars)
#   a a.1 b c
# 1 1   3 4 5
# 2 2   3 4 5
# 3 3   3 4 5
# 4 4   3 4 5
# 5 5   3 4 5
# 6 6   3 4 5
data.frame(dfb, pars)
#   b a b.1 c
# 1 3 3   4 5
# 2 4 3   4 5
# 3 5 3   4 5
# 4 6 3   4 5

由于您的模型不使用 a.1 或 b.1 您不必排除它们,但将 [, -2] 添加到第一个模型和 [, -3] 会解决这个问题。


推荐阅读