我有大约20个数据框,它们的格式和尺寸完全相同,共有六列。每个数据帧之间的唯一区别是第六列中的不同值。我想对所有数据帧进行循环,以便在第六列的所有数据帧中获得最小值。我的计划是列出向量中的所有数据帧,然后遍历向量,然后遍历数据帧的每一行,尽管我不确定如何实现类似的东西。我将不胜感激任何建议。
答案 0 :(得分:0)
如果您的目标是仅考虑所有数据帧中的最后一列(第6列)来找到最小值,那么以下是一种解决方案:
DF <- rbind (df1, df2, ..., df20) # Combine data frames, vertically
last_col <- DF [, ncol(DF)] # Only care about 6th column
min(last_col)
答案 1 :(得分:0)
如果数据帧是DF1,DF2,...,DF20,则假定您想要数据帧DF,使得DF [i,j] = min(DF1 [i,j],DF2 [i,j], ...,DF20 [i,j])然后:
L <- list(DF1, DF2, DF3, DF4, DF5, DF6, DF7, DF8, DF9, DF10,
DF11, DF12, DF13, DF14, DF15, DF16, DF17, DF18, DF19, DF20)
Reduce(pmin, L)
或
do.call(pmin, L)
或
pmin(DF1, DF2, DF3, DF4, DF5, DF6, DF7, DF8, DF9, DF10,
DF11, DF12, DF13, DF14, DF15, DF16, DF17, DF18, DF19, DF20)
除了将其写出来外,我们还可以通过其他方式获得L
:
如果我们在字符向量Names
中具有数据帧的名称,则L <- mget(Names, .GlobalEnv)
,并且如果我们知道数据帧都具有名称DF
,后跟数字,则我们可以使用Names
Names <- ls(pattern = "^DF\\d+$")
如果全局环境中仅有的数据帧是DF1,DF2,...,DFn,那么我们可以像这样形成L
:
m <- mget(ls(), envir = .GlobalEnv, mode = "list", ifnotfound = NA)
L <- Filter(is.data.frame, m)