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

根据组中其他列中至少有一个变量的出现情况创建新列

  •  1
  • ykl  · 技术社区  · 8 年前

    考虑以下数据帧:

    ID <- c(1,1,1,2,2,3,3,3,3)
    A <- c("No","No","Yes","Yes","Yes","No","No","No","No")
    B <- c("Yes","Yes","Yes","Yes","Yes","No","No","No","No")
    df <- data.frame(ID,A,B)
    

    我想创建B列,其中A列中至少出现一个“Yes”会导致每个单独ID在B列中只出现“Yes”值。我尝试了以下两种方法(我觉得我差不多做到了):

    library(dplyr)
    df <- df %>% 
      group_by(ID) %>% 
      mutate(B1=ifelse(A == "Yes", "Yes", "No")) # B1 is the new column for comparison
    

    不幸的是,这与

    df2 <- transform(df, B1= ave(A, ID, FUN=function(x) x[A == "Yes"]))
    

    生成错误消息:

    1: 在x中[…]<-m: 要更换的项目数量不是更换长度的倍数

    非常感谢您的帮助。

    1 回复  |  直到 8 年前
        1
  •  5
  •   user2602640    8 年前

    你差点就成功了。这里是对你的管道的一个小编辑。这就是你想要的吗?

    df <- df %>% 
     group_by(ID) %>% 
     mutate(B1=ifelse("Yes" %in% A, "Yes", "No"))
    df
    
    推荐文章