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

Concatenate data according to a partial numeric match

我有两个数据框。

一个结构如下:

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

另一个是:

 code_2.  name.  
  11       F
  21       G

我想获得第三个 df,它与代码匹配有关,使用 "OR" 分隔符连接第一个数据框中存在的数据。我要维护的代码值是第二个 df 之一。重要的是,代码值之间的匹配将在属于第一个数据帧的代码的第一个和第二个数字上进行。

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

感谢您的建议!

您可以使用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

您可以照常处理列名。

如果您更喜欢 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

它按 "code." 中的前两个元素分组,然后根据这些元素合并 "name." 列。

或使用相同的 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 "))