根据部分数字匹配连接数据

时间:2019-02-01 10:46:03

标签: r string-concatenation

我有两个数据帧。

一个结构如下:

  code.  name.  
  1111   A B  
  1122   C D
  2122   C D
  2133   G H

另一个是:

 code_2.  name.  
  11       F
  21       G
我想获得一个第三df,它与代码匹配有关,使用“或”分隔符将我的数据串联在第一数据帧中。我要保留的代码值是第二个df之一。重要的是,必须在属于第一个数据帧的代码的第一个和第二个数字上匹配代码值

 code.     name.  
  11     A B OR C D
  21     C D OR G H

感谢您的建议!

2 个答案:

答案 0 :(得分:3)

您可以使用aggregate,即

aggregate(name. ~ substr(code., 1, 2), df, paste, collapse = ' OR ')
#  substr(code., 1, 2)      name.
#1                  11 A B OR C D
#2                  21 C D OR G H

您可以照常处理列名。

答案 1 :(得分:2)

如果您更喜欢tidyverse,则可以尝试以下操作:

df %>%
 group_by(code. = str_extract(as.character(code.), "^.{2}")) %>%
 summarise(name. = paste(name., collapse = " OR "))

  code. name.     
  <chr> <chr>     
1 11    A B OR C D
2 21    C D OR G H

按“代码”的前两个元素进行分组。然后合并“名称”。基于这些元素的列。

或使用sub()相同:

df %>%
 group_by(code. = sub("^(.{2}).*", "\\1", as.character(code.))) %>%
 summarise(name. = paste(name., collapse = " OR "))

或使用substring()相同:

df %>%
 group_by(code. = substring(as.character(code.), 1, 2)) %>%
 summarise(name. = paste(name., collapse = " OR "))