【问题标题】:Compare row values to column in dataframe for partial match using R [duplicate]使用 R 将行值与数据框中的列进行比较以进行部分匹配
【发布时间】:2020-07-03 14:42:25
【问题描述】:

我有一个数据框

Name
1.Started
2.Home
3.Signout

我想与另一个数据框中的另一列进行比较

Df
1.help/services/Home 
2./msoffice/home 
3./windows.support

预期输出:

False
True
False

这表明来自名称的Home 存在于df 中。它与另一整列部分匹配。

【问题讨论】:

标签: r string-matching partial


【解决方案1】:

我们可以比较 Namedf1 并使用 basename 来获取字符串的最后一部分。

df1$Name %in% basename(df2$col)
#[1] FALSE  TRUE FALSE

数据

假设数据帧是df1df2,如下所示。

df1 <- structure(list(Name = c("Started", "Home", "Signout")), row.names = c(NA, 
      -3L), class = "data.frame")

df2 <- structure(list(col = c("help/services/Home", "/msoffice/home", 
"/windows.support")), class = "data.frame", row.names = c(NA, -3L))

【讨论】:

  • 感谢解决,如果df1的行数小于df2怎么办?在这种情况下如何进行
  • @maddie 在这种情况下你想如何比较?为什么第一行是FALSE,第二行是TRUE
  • 如果第 1 行不存在于 df2 中则为 FALSE ,如果第 2 行存在于任何 df2 行中则为 TRUR
  • @maddie 您可以使用df1$Name %in% basename(df2$col),它适用于任意数量的行。那是你要的吗?还更新了答案。
  • 感谢@Ronak Shah
【解决方案2】:

我们可以使用grepl

mapply(grepl, tolower(df1$Name), tolower(df2$col))
#FALSE    TRUE   FALSE 

数据

df1 <- structure(list(Name = c("Started", "Home", "Signout")), row.names = c(NA, 
      -3L), class = "data.frame")

df2 <- structure(list(col = c("help/services/Home", "/msoffice/home", 
"/windows.support")), class = "data.frame", row.names = c(NA, -3L))

【讨论】:

    猜你喜欢
    • 2019-01-23
    • 1970-01-01
    • 2015-12-19
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多