【问题标题】:How to create new dataframes for each iteration in R for loop?如何为 R for 循环中的每次迭代创建新的数据框?
【发布时间】:2021-09-23 09:59:09
【问题描述】:

我正在尝试为 R for 循环中的每次迭代创建新的数据帧。首先,我正在计算我的数据的百分位数并将它们存储为数据框。

comparison_data = fread("data.txt",
                            stringsAsFactors=FALSE,
                            col.names=c("c2",
                                         "m1_area", "m1_distance", "m1_tags",
                                         "m2_area", "m2_distance", "m2_tags"
                                         )
                             )

m1_list <- quantile(comparison_data$m1_area, probs = c(.1, .2, .3, .4, .5, .6, .7))
m2_list <- quantile(comparison_data$m2_area, probs = c(.1, .2, .3, .4, .5, .6, .7))
m1_m2_list = as.data.frame(cbind(m1_list, m2_list))

我想根据特定的百分位数过滤我的 compare_data 文件并保存生成的数据表。

filter_data_table <- function(a, b) {
  m1_m2_filtered <- dplyr::filter(comparison_data, m1_area > a & m2_area > b)
}

for (i in m1_m2_list) {
  data_frames_list <- sapply(comparison_data, filter_data_table(m1_m2_list$m1_list[i], m1_m2_list$m2_list[i]))
  }

我得到一个错误:

Error in match.fun(FUN) : 
  'filter_data_table(m1_m2_list$m1_list[i], m1_m2_list$m2_list[i])' is not a function, character or symbol
In addition: Warning messages:
1: In m1_area > a :
  longer object length is not a multiple of shorter object length
2: In m2_area > b :
  longer object length is not a multiple of shorter object length

我该如何解决?

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试Map-

    m1_m2_list = data.frame(m1_list, m2_list)
    result <- Map(filter_data_table, m1_m2_list$m1_list, m1_m2_list$m2_list)
    

    result 将拥有长度与nrow(m1_m2_list) 相同的数据帧列表。每个数据帧将从一对m1_listm2_list 输出。

    【讨论】:

      【解决方案2】:

      看起来它在您的 sapply 函数中。

      没有可重复的数据,所以我可以理解发生了什么这是我的最大努力。

      试试:

      filter_data_table <- function(x =comparison_data, a, b) {
        m1_m2_filtered <- dplyr::filter(x, m1_area > a & m2_area > b)
      }
      
      for (i in m1_m2_list) {
        data_frames_list <- sapply(comparison_data, filter_data_table, a = m1_m2_list$m1_list[i], b = m1_m2_list$m2_list[i])
      }
      

      【讨论】:

        猜你喜欢
        • 2020-08-31
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多