rbind() 有条件的

rbind () on a conditional basis

这是问题。我有一堆 if 语句可以根据用户输入创建不同的数据框 (A-F)。在某些情况下,一些数据框会是空的,所以可能 (A-C) 是空的,但 (D-F) 有信息。

我正在尝试创建一个条件 rbind(),它仅在数据框不为空时才合并行。

我不太确定该怎么做?我不知道我是否应该创建一堆条件并使用另一个 if 语句:

cond_a <- nrow(a) != 0
cond_b <- nrow(b) != 0
cond_c <- nrow(c) != 0
cond_d <- nrow(d) != 0
cond_e <- nrow(e) != 0
cond_f <- nrow(f) != 0 

但是我不知道如何利用这些条件...

编辑:退后一步,更好地解释:我有一个数据框,我通过按列子集将其分成 6 个不同的数据框,因此它将它分成 6 个数据框 (A-G)。该列具有字母 A-G。该列中的这些字母 A-G 根据用户输入而变化。

然后我有一系列询问 "if A is not empty then perform this aggregation" 的 if 语句,因此如果 df 中没有数据则跳过 df。聚合从 16 列到 19 列。因为空的 df 还没有聚合它仍然有 19 列。在我执行这些 if 语句和聚合后,我剩下的 dfA、dfB、dfC 等已经聚合(16 列)或仍然为空(19 列)。然后我想要一段代码说“对于已经聚合的 df(16 列)rbind,如果 df 没有被聚合(为空),那么不要执行 rbind。

谢谢!

你可以这样做:

  1. 创建一个空的数据框列表select。
  2. 写一堆if语句,看看哪些包含非零零
  3. 继续将那些非零 DF 的名称添加到步骤 1 中创建的空列表中
  4. 编写一个表达式,将这些名称折叠为 rbind 表达式
  5. 计算表达式

这是执行此操作的脚本:

1.Create 用于存储数据帧名称的空列表

list.df = " "

2&3。 If 语句检查数据帧是否为非零,如果为真,则将名称添加到列表中

if(nrow(df.a) > 0) { 
  list.df=c(list.df,deparse(substitute(df.a)))
 }

if(nrow(df.b) > 0) { 
  list.df=c(list.df,deparse(substitute(df.b)))
 }

if(nrow(df.c) > 0) { 
 list.df=c(list.df,deparse(substitute(df.c)))
 }

..... 从 A 到 G

if(nrow(df.g) > 0) { 
 list.df=c(list.df,deparse(substitute(df.g)))
 }

4.Formulate 表达式

list.df = list.df[2:length(list.df)] #remove first element 
expression = paste0("df.combined = rbind(",paste0( list.df, collapse =
','), paste0(")"))

5.Evaluate表达式

eval(parse(text=expression))

df.combined 将是您要查找的最终数据集