如果两个向量之间存在 grep 匹配,则返回数据帧的不同列

标签 r regex dataframe grepl

我有一个文件名向量和一个包含每个文件名的“组”名称的数据框。

files <- c("data/backup/LATEST/20181514.X1235",
           "data/backup/LATEST/X1255+20181514",
           "data/backup/LATEST/20181514-X1237",
           "data/backup/LATEST/20181514-E1235",
           "data/backup/LATEST/20181514F1235",
           "data/backup/LATEST/M32_-X6635__20181514",
           "data/backup/LATEST/20181514-X1205",
           "data/backup/LATEST/l-A1230.20181514-XX")

groups <- data.frame(
                    ID = c("X1235","X1255","A1230","K93430",
                           "LOP0343","J3490","X1205","X6635",
                           "F1235","E1235","X1237"), 
                    Group = c("A","A","A",
                              "B","A","A",
                              "B","B","B",
                              "B","A")
)

作为最终结果,我想要一个包含来自 files 的完整文件路径的列的数据框和第二列显示其 group .

我怎样才能做到这一点?

结果
                           filepath         group
1 data/backup/LATEST/20181514.X1235         A
2 data/backup/LATEST/X1255+20181514         A
3 data/backup/LATEST/20181514-X1237         A
4 data/backup/LATEST/20181514-E1235         B
5 data/backup/LATEST/20181514F1235          B
6 data/backup/LATEST/M32_-X6635__20181514   B
7 data/backup/LATEST/20181514-X1205         B
8 data/backup/LATEST/l-A1230.20181514-XX    A

最佳答案

这是一种使用 stringr::str_detect 的方法

library(stringr)
strdet <- function(x){
      #browser()
      groups[str_detect(x,groups$ID),'Group']
      }

apply(df, 1, strdet)

[1] "A" "A" "A" "B" "B" "B" "B" "A"
PS:
  • 我将文件更改为数据框并
  • 我假设您在文件和组之间有一对一的关系
  • 我使用 stringAsFactor=FALSE 读取了 df
    数据
    df <- data.frame(files, stringsAsFactors = FALSE)
    
  • 关于如果两个向量之间存在 grep 匹配,则返回数据帧的不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52181444/

    相关文章:

    php - 从模式中的字符串获取数组 - key1 :val1, val2,..;key2 :val1,

    java - 在一个 if 语句(+ XOR,正则表达式)中缩短多个 AND + OR

    r - 数据框的子集,其中一列的倒数第二个值

    python - 将列添加到python中的数据集

    linux - 从 shell 脚本执行 R 命令

    r - 为 gtsummary 包设置默认主题和粗体变量

    java - 从大字符串中获取特定的子字符串

    r - 处理R中缺少的因子组合

    r - 将 R 数据框中的行值转换为列值,其中 1 表示存在,0 表示不存在

    python-3.x - 如何在查看前几行值的每一行中执行代码的同时,高效地逐行遍历 pandas 数据框?