rbind()有条件的

时间:2017-11-18 01:24:51

标签: r if-statement conditional rbind

这是问题所在。我有一堆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语句要求&#34;如果A不为空,则执行此聚合&#34;,如果它没有数据,则跳过df。聚合从16列到19列。因为空df尚未聚合,所以它仍然有19列。在我执行这些if语句和聚合之后,我留下了dfA,dfB,dfC等,它们已经聚合(16列)或仍然是空的(19列)。然后我想要一段代码,说明&#34;对于已经聚合的df(16列)rbind,如果df尚未聚合(为空),则不执行rbind。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以这样做:

  1. 创建您要选择的数据框的空列表。
  2. 写一堆if语句以查看哪些语句包含非零零
  3. 继续将非零DF的名称添加到步骤1中创建的空列表
  4. 编写一个表达式,将这些名称折叠为rbind表达式
  5. 评估表达式
  6. 以下是执行此操作的脚本:

    1.创建一个空列表来存储数据帧的名称

    list.df = " "
    

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

    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.形式化表达式

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

    5.评估表达式

    eval(parse(text=expression))
    

    df.combined将是您正在寻找的最终数据集