【问题标题】:Find a subset of dataframe based on partial string matching from another column of values in R根据 R 中另一列值的部分字符串匹配查找数据帧的子集
【发布时间】:2020-03-29 08:17:37
【问题描述】:

我有一列具有唯一标识符的值,如下所示:

df$1 <– c("identifier:ab134:4sfh", "identifier:gh164:9sgh", "identifier:3h1v4:kk9gh"

其中一些位于具有 71 列的单独数据框中的另一列中,但在该数据框中,它们通常像这样聚集:

df2$1 <– c(""identifier:ab134:4sfh|identifier:gh164:9sgh", "identifier:sfghskg8:kk9gh|identifier:fj893n:9sgh|identifier:gh164:9sgh",...)

我需要在第二个数据框中找到所有包含任何标识符的行。我会拆分列,但我想保持第二个数据集的其余部分不变。

我尝试过两种方式都使用此代码(即 df1 %in% df2 和 df2 %in% df1),但显然它并没有给我所有匹配项,因为它试图匹配整个字符串而不是子字符串:

new_subset <- subset(df$1, trimws(1) %in% trimws(df2$1))

有什么建议吗?提前感谢您的帮助!

【问题讨论】:

  • 我真的不确定我可以添加什么。我需要为每一行匹配,并且我使用了上面的代码(不起作用)。
  • 如果你可以为你展示的向量提供预期的输出,这将有助于lapply(v1, function(x) unlist(lapply(strsplit(v2, "|", fixed = TRUE), function(y) match(x, y)))) 也可以试试grep(df2$1, df$1)
  • 所以我尝试了这个,我得到了一个很长的列表,如下所示: 8806 列表 $ : int [1:14037] NA NA NA NA NA NA NA NA NA NA ... $ :整数 [1:14037] 不适用 不适用 不适用 不适用 不适用NA NA NA NA NA NA NA NA ...
  • 我想要一个如下所示的输出:df$2
  • 您的代码中有不匹配的引号

标签: r


【解决方案1】:

也许您可以使用grep 来查找匹配的字符串。

new_subset <- df[grep(paste0("^(",paste(df2$z, collapse = "|"),")$"), df$z),]
new_subset
#[1] identifier:ab134:4sfh identifier:gh164:9sgh

数据:

df <- data.frame(z=c("identifier:ab134:4sfh", "identifier:gh164:9sgh", "identifier:3h1v4:kk9gh"))
df2 <- data.frame(z=c("identifier:ab134:4sfh|identifier:gh164:9sgh", "identifier:sfghskg8:kk9gh|identifier:fj893n:9sgh|identifier:gh164:9sgh"))

【讨论】:

  • 我收到一条错误消息作为响应: paste(df2, , collapse = "|") : 参数丢失,没有默认值
  • @OliverL 我写的是paste(df2, collapse = "|") 而不是paste(df2, , collapse = "|")
  • @OliverL 我已将问题中的数据集从vector 更新为data.frame。希望这能解决问题。
  • 非常感谢您的帮助。所以现在它说"Error in grep(paste0("^(", paste(df1, collapse = "|", : invalid regular expression '^("identifier:ab134:4sfh|identifier:gh164:9sgh"..)
  • 这可能与collapse = "|" 有关 - 我需要以某种方式对其进行更改以使其符合正则表达式规则吗?
猜你喜欢
  • 2021-08-11
  • 1970-01-01
  • 2014-09-20
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2020-08-31
相关资源
最近更新 更多