代码之家  ›  专栏  ›  技术社区  ›  Lotw

R检查组中的级别,如果不存在则复制行

  •  1
  • Lotw  · 技术社区  · 7 年前

    我有以下数据:

    Group<-c("A","A","B","C","C","D")
    Value<-c(1,2,6,7,3,9)
    
    df<-data.frame(Group, Value)
    
      Group Value 
         A     1   
         A     2   
         B     6   
         C     7   
         C     3   
         D     9   
    

    然后我添加一行以查看一个组有多少个重复:

    df$num <- ave(df$Value, df$Group,  FUN = seq_along)
    
      Group Value num
         A     1   1
         A     2   2
         B     6   1
         C     7   1
         C     3   2
         D     9   1
    

    现在,我想检查组是否包含第二个rep,如果没有,复制组的第一行(包含num=1)并将num设置为2。 最后我想说:

      Group Value num
         A     1   1
         A     2   2
         B     6   1
         B     6   2 #this row is added
         C     7   1
         C     3   2
         D     9   1
         D     9   2 #this row is added
    

    我试着寻找解决办法,但我主要是以一个条件,这是一个主题结束 based on a certain value ,而不是组内的条件。

    有人能帮我吗?我会非常感激的!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Bambs    7 年前

    这个代码能做到吗?

    res <- lapply(unique(df$Group), function(x){
      a <- df[df$Group == x, ]
      if(nrow(a) == 1) {
        a <- a[rep(row.names(a), 2), ]
        a$num <- c(1:2)
      }
      a
    })
    do.call(rbind, res)