首页 > 解决方案 > R:根据部分匹配字符将列添加到数据框

问题描述

我有一个带有 ID 和值列的示例数据框:

ID_short    Value
Boar            4
Pig             5
Duck            6
Dog             7
Cat             8
Horse           9

我有另一个数据框,其中有一列具有相同的 ID,但扩展了更多字符:

ID_Extended
Duck_p15
Dog32
PigGG
Horse_p12
Cat_Ok
Boar_Ko_1999_test

我想将此 ID_Extended 列添加到第一个数据帧,并且我希望扩展 ID 仍与正确行中的短 ID 匹配。ID 是类字符。

所需输出的示例:

ID  Value   ID_Extended
Boar    4   Boar_Ko_1999_test
Pig     5   PigGG
Duck    6   Duck_p15
Dog     7   Dog32
Cat     8   Cat_Ok
Horse   9   Horse_p12

标签: r

解决方案


这里有一些东西:

df1$D_Extended <- 
  df2$ID_Extended[sapply(df1$ID_short, 
                         function(x) match(x, substr(df2$ID_Extended, 1, nchar(x))))]


df1
  ID_short Value        D_Extended
1     Boar     4 Boar_Ko_1999_test
2      Pig     5             PigGG
3     Duck     6          Duck_p15
4      Dog     7             Dog32
5      Cat     8            Cat_Ok
6    Horse     9         Horse_p12

数据:

df1 <- data.frame(
  ID_short = c("Boar", "Pig", "Duck", "Dog", "Cat", "Horse"), 
  Value = 4:9,
  stringsAsFactors = FALSE
)
df2 <- data.frame(
  ID_Extended = c("Duck_p15", "Dog32", "PigGG","Horse_p12", "Cat_Ok", "Boar_Ko_1999_test"),
  stringsAsFactors = FALSE
)

推荐阅读