查找与R中的向量相同的行

时间:2018-07-18 19:23:59

标签: r dplyr

我想逐行搜索,如果它与预定义的向量匹配,请为该行的变量分配一个值。我更喜欢通过使用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时在case_when中简单键入内容,因为在数据集中键入的变量太多了。

谢谢您的建议。

2 个答案:

答案 0 :(得分:2)

对于此示例

以下代码将起作用

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

答案 1 :(得分:1)

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

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