【问题标题】:R For Loop Append Dataframe Iterations to Empty MatrixR For循环将数据帧迭代附加到空矩阵
【发布时间】:2020-12-03 18:52:04
【问题描述】:

我正在尝试创建一个空矩阵并用数据框的迭代填充它。使用以下代码:

df <- data.frame(col1 = c(1:10), col2 = letters[1:10])
var <- seq(-.25,.25,.05)
var <- var[var != 0]

output <- matrix(ncol=ncol(df)+1, nrow=nrow(df)*length(var))

for(i in 1:length(var)){
  output[i,] <- df %>% mutate(var = df$col1*var[i])
}

使用此代码,我收到以下错误消息:矩阵上的下标数量不正确

有谁知道可能是什么问题?我想要的输出是将 df 的 col1 中的每个值乘以列表 var 中的每个值。

感谢您的建议!

【问题讨论】:

    标签: r loops for-loop iteration combinations


    【解决方案1】:

    不是 for 循环,但这是您想要的输出吗?

    library(dplyr,warn.conflicts = FALSE)
    
    df <- data.frame(col1 = c(1:10), col2 = letters[1:10])
    var <- seq(-.25,.25,.05)
    var <- var[var != 0]
    
    output <- matrix(ncol=ncol(df)+1, nrow=nrow(df)*length(var))
    
    lapply(1:length(var), function(i) {
      x <- df %>% 
        rowwise() %>% 
        mutate(var = col1*var[i]) %>%
        bind_rows()
    }) %>% bind_rows()
    #> # A tibble: 100 x 3
    #> # Rowwise: 
    #>     col1 col2    var
    #>    <int> <chr> <dbl>
    #>  1     1 a     -0.25
    #>  2     2 b     -0.5 
    #>  3     3 c     -0.75
    #>  4     4 d     -1   
    #>  5     5 e     -1.25
    #>  6     6 f     -1.5 
    #>  7     7 g     -1.75
    #>  8     8 h     -2   
    #>  9     9 i     -2.25
    #> 10    10 j     -2.5 
    #> # ... with 90 more rows
    

    reprex package (v0.3.0) 于 2020 年 12 月 3 日创建

    【讨论】:

    • 是的,这很完美!谢谢!
    【解决方案2】:

    创建col1、col2、var的100行数据框

    var <- sapply(var, function(x) x * col1)
    var <- as.vector(var)
    col1 <- rep(col1, 10)
    col2 <- rep(letters[1:10], 10)
    df <- data.frame(col1, col2, var)
    df
        col1 col2   var
    1      1    a -0.25
    2      2    b -0.50
    3      3    c -0.75
    4      4    d -1.00
    5      5    e -1.25
    6      6    f -1.50
    7      7    g -1.75
    8      8    h -2.00
    9      9    i -2.25
    10    10    j -2.50
    

    【讨论】:

    • 生成的数据帧应该是 100 行(遍历 col1 的每一行 10 次(向量 var 中的每个值一次)。
    • 你失去了我。 'length(var)' = 10。所以循环是从 1 到 10。请参阅更新后的答案。
    • 生成的数据框输出应该有 3 列和 100 行。第 1 列 = df 的 col1 中的每个值重复 10X,第 2 列 = df 的 col2 中的每个值重复 10X,第 3 列 = 向量 Var 的每个值重复 10X。这有意义吗?
    • 第三列 = 向量 Var 的每个值重复 10X。你又失去了我。你不想df$col1*var[i])
    • 见下面来自 Andrew Brown 的回答。这是期望的输出。
    猜你喜欢
    • 2016-01-31
    • 2013-07-30
    • 2015-04-05
    • 2017-10-21
    • 2019-02-22
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多