代码之家  ›  专栏  ›  技术社区  ›  Chuck C

在r中查找与向量相同的行

  •  1
  • Chuck C  · 技术社区  · 6 年前

    我想逐行搜索,如果它匹配一个预定义的向量,则为该行的变量赋值我更喜欢用dplyr来解决这个问题。

    对于一个简单的例子:

    a=c(1,2,NA)
    b=c(1,NA,NA)
    c=c(1,2,3)
    d=c(1,2,NA)
    D= data.frame(a,b,c,d)
    

    我的尝试是:

    D %>% mutate(
                i= case_when(
                     identical(c(a,b,c),c(1,1,1)) ~ 1,
                     identical(c(a,b,c),c(NA,NA,3)) ~ 2
                             )
                 )
    

    我希望它能给我:

       a  b c  d  i
    1  1  1 1  1  1
    2  2 NA 2  2  NA
    3 NA NA 3  NA 2
    

    但我的代码不起作用,我想是因为它没有把行与向量进行比较。

    我不想简单地在案件中键入 c==1 & b==1 & c== 1 ~ 1 因为在我的数据集中会有太多的变量要输入。

    谢谢你的建议。

    2 回复  |  直到 6 年前
        1
  •  1
  •   akrun    6 年前

    如果有多个条件,请创建一个键/值数据集,然后执行联接

    library(dplyr)
    keydat <- data.frame(a =c(1, NA), b = c(1, NA), c = c(1, 3), i = c(1, 2))
    left_join(D, keydat)
    #   a  b c  d  i
    #1  1  1 1  1  1
    #2  2 NA 2  2 NA
    #3 NA NA 3 NA  2
    
        2
  •  2
  •   Emily Kothe    6 年前

    对于这个例子

    下面的代码可以工作

    a=c(1,2,NA)
    b=c(1,NA,NA)
    c=c(1,2,3)
    D= data.frame(a,b,c,d)
    
    
      D %>% mutate(
        i= case_when(
          paste(a,b,c, sep=',') == paste(1,1,1, sep=",") ~ 1,
          paste(a,b,c, sep=',') == paste(NA,NA,3, sep=",") ~ 2
        )
      )
    
       a  b c  d  i
    1  1  1 1  1  1
    2  2 NA 2  2 NA
    3 NA NA 3 NA  2