Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何创建一个用于合并多个数据集的循环,以评估所有可能的组合(两类、三类、多类)_R_Loops_Rbind - Fatal编程技术网

R 如何创建一个用于合并多个数据集的循环,以评估所有可能的组合(两类、三类、多类)

R 如何创建一个用于合并多个数据集的循环,以评估所有可能的组合(两类、三类、多类),r,loops,rbind,R,Loops,Rbind,我正在编写一个代码,根据我正在处理的分类模型中涉及的不同类,提供具有不同矩阵的输出。因此,我获得了一组具有相同列名(即相同类)并由“factor”列中报告的factor标识的数据集(数字未定义)。我想获得它们的所有多重组合,以便比较多种分类,并找出哪一种是最好的。下面是我想要实现的一个示例(例如,在评估3个类时,即3个不同的数据集): frame_x=data.frame(a=c(12,10,3),b=c(6,4,2),c=c(3,62,3),factor=c(“x”,“x”,“x”)) fra

我正在编写一个代码,根据我正在处理的分类模型中涉及的不同类,提供具有不同矩阵的输出。因此,我获得了一组具有相同列名(即相同类)并由“factor”列中报告的factor标识的数据集(数字未定义)。我想获得它们的所有多重组合,以便比较多种分类,并找出哪一种是最好的。下面是我想要实现的一个示例(例如,在评估3个类时,即3个不同的数据集):

frame_x=data.frame(a=c(12,10,3),b=c(6,4,2),c=c(3,62,3),factor=c(“x”,“x”,“x”))
frame_y=data.frame(a=c(2,13,34),b=c(22,13,36),c=c(22,13,34),factor=c(“y”,“y”,“y”))
frame_z=data.frame(a=c(36,28,11),b=c(32,24,16),c=c(33,22,17),factor=c(“z”,“z”,“z”))
frame_x_new=rbind(frame_x,frame_y,frame_z)
框架x新的$factor=c(“x”、“x”、“x”、“其他”、“其他”、“其他”、“其他”、“其他”、“其他”)
frame_y_new=rbind(frame_y,frame_x,frame_z)
框架y新的$factor=c(“y”、“y”、“y”、“其他”、“其他”、“其他”、“其他”、“其他”)
frame_z_new=rbind(frame_z,frame_x,frame_y)
frame_z_new$factor=c(“z”、“z”、“z”、“其他”、“其他”、“其他”、“其他”、“其他”)

frame_x以下函数满足问题的要求。
它需要两个参数

  • pattern
    是数据帧名称的正则表达式模式
  • sep
    分隔df的名称并定义后缀
请注意,原始数据集将被更改

fun <- function(pattern, sep = "_"){
  frame_list <- ls(pattern = pattern, envir = .GlobalEnv)
  suffix <- sapply(strsplit(frame_list, sep), '[[', 2)
  df_list <- mget(frame_list, envir = .GlobalEnv)
  sa <- seq_along(df_list)
  res <- lapply(sa, function(i){
    n <- nrow(df_list[[i]])
    tmp <- do.call(rbind, df_list[c(i, sa[-i])])
    tmp$factor <- c(rep(suffix[i], n),
                    rep("other", nrow(tmp) - n))
    row.names(tmp) <- NULL
    tmp
  })
  names(res) <- frame_list
  list2env(res, envir = .GlobalEnv)
}

fun("^frame")

fun亲爱的@Rui,这正是我想要的。非常感谢你的帮助!
fun <- function(pattern, sep = "_"){
  frame_list <- ls(pattern = pattern, envir = .GlobalEnv)
  suffix <- sapply(strsplit(frame_list, sep), '[[', 2)
  df_list <- mget(frame_list, envir = .GlobalEnv)
  sa <- seq_along(df_list)
  res <- lapply(sa, function(i){
    n <- nrow(df_list[[i]])
    tmp <- do.call(rbind, df_list[c(i, sa[-i])])
    tmp$factor <- c(rep(suffix[i], n),
                    rep("other", nrow(tmp) - n))
    row.names(tmp) <- NULL
    tmp
  })
  names(res) <- frame_list
  list2env(res, envir = .GlobalEnv)
}

fun("^frame")