【问题标题】:How to apply dplyr arrange function within a loop?如何在循环中应用 dplyr 排列功能?
【发布时间】:2020-09-28 10:54:34
【问题描述】:

您好,我想在 for 循环中的列上应用 dplyr 排列函数,但由于某种原因它不起作用。这是一个最小的例子:

for (j in colnames(df1)[3:ncol(df1)]){
  # create datframe for each column
  t <- select(df1, all_of(j))
  t %>% arrange(j)
  var_list[[j]] <- t
  for (i in var_list[[j]]$Timestep )
  
  ### arrange each timestep df by each colun once
  scenario[[i+1]] <- var_list[[j]][min:max,]
  
  # subset data to the scenarios of interest
  }

我想问题是 j 提供了一个字符串“变量”,但 dplyr 安排需要它没有“”。我尝试过 as.name()、paste() 和 eval 解析函数,但它们都不起作用。有任何想法吗?谢谢!

【问题讨论】:

    标签: r for-loop dplyr


    【解决方案1】:

    这似乎有效:

    df1 <- mtcars
    var_list <- list()
    for (j in colnames(df1)[3:ncol(df1)]){
      # create datframe for each column
      t <- select(df1, all_of(j))
      
      var_list[[j]] <- t %>% arrange_at(1)
      for (i in var_list[[j]]$Timestep )
        
        ### arrange each timestep df by each colun once
        scenario[[i+1]] <- var_list[[j]][min:max,]
      
      # subset data to the scenarios of interest
    }
    var_list
    

    【讨论】:

      【解决方案2】:

      不幸的是,它不起作用。它应该按升序对列 j 进行排序。也许安排不是最好的功能 - 但是排序或排序也不起作用。无法理解我做错了什么。但是我发现了一个使用长数据格式的解决方法:

      for (j in colnames(df1)[3:ncol(df1)]){
        # create datframe for each timestep
        t <- select(df1, Trial, Timestep, all_of(j))
        var_list[[j]] <- melt(t, id.vars=c("Trial", "Timestep"))
        var_list[[j]] <- var_list[[j]] %>% arrange(value)
      

      【讨论】:

        猜你喜欢
        • 2020-01-21
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 2018-06-23
        • 2021-07-27
        • 1970-01-01
        相关资源
        最近更新 更多