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