You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从DataFrame的多个Team_URL列提取LinkedIn链接末尾ID?

问题

我有一个名为df_1的DataFrame,包含70个格式为Team_URL_1、Team_URL_2……Team_URL_70的列,这些列存储的是https://www.linkedin.com/in/namexyz/格式的LinkedIn链接。需要从每个链接末尾的两个斜杠之间提取ID(如namexyz),并生成对应的Team_ID_n列存储该ID。

示例输入数据:

structure(list(Company = c("csd", "fwef", "wrev"), Team_1 = c("0", 
"werg", "sdf"), Team_Desc_1 = c("wer", "wtrb", "wergt"), Team_URL_1 = c("https://www.linkedin.com/in/namexyz/", 
"https://www.linkedin.com/in/namesrvf/", "https://www.linkedin.com/in/nameawrf/"
), Team_Ver_1 = c("25", "2523", "342"), Team_Num_1 = c(0, 23, 
12), Team_Value_1 = c("aed", "jfsa", "vsf"), Team_2 = c("werh", 
"wtt", "qwe"), Team_Desc_2 = c("sdfg", "wer", "sdfgv"), Team_URL_2 = c("https://www.linkedin.com/in/namexqwrg/", 
"https://www.linkedin.com/in/namewqrg/", "https://www.linkedin.com/in/nameqerwg/"
), Team_Ver_2 = c("4123", "5133", "4126"), Team_Num_2 = c(3, 
0, 123), Team_Value_2 = c("aewed", "jfsbwa", "vsbf")), class = "data.frame", row.names = c(NA, 
-3L))

期望输出(新增Team_ID_n列):

Company Team_1 Team_Desc_1  Team_URL_1                             Team_Ver_1 Team_Num_1 Team_Value_1 Team_ID_1     ...
csd     0      wer          https://www.linkedin.com/in/namexyz/   25         0          aed          namexyz
fwef    werg   wtrb         https://www.linkedin.com/in/namesrvf/  2523       23         jfsa         namesrvf
wrev    sdf    wergt        https://www.linkedin.com/in/nameawrf/  342        12         vsf          nameawrf
解决方案

方法一:tidyverse 批量处理

借助dplyr的批量列操作和stringr的正则提取,代码简洁高效:

library(tidyverse)

# 筛选所有Team_URL开头的列
url_cols <- str_subset(colnames(df_1), "^Team_URL_\\d+$")

# 提取ID并生成对应Team_ID列
df_1 <- df_1 %>%
  mutate(
    across(
      all_of(url_cols),
      ~str_extract(., "(?<=in/)[^/]+"),  # 匹配in/后到下一个/前的内容
      .names = "Team_ID_{str_remove(.col, 'Team_URL_')}"
    )
  )

方法二:Base R 原生实现

无需额外安装包,通过循环和正则完成处理:

# 获取所有Team_URL列的名称
url_cols <- grep("^Team_URL_\\d+$", colnames(df_1), value = TRUE)

# 逐个处理每个URL列
for (col in url_cols) {
  # 生成对应的Team_ID列名
  id_col <- gsub("Team_URL_", "Team_ID_", col)
  # 用正则提取ID:匹配in/后的内容,直到末尾或下一个/
  df_1[[id_col]] <- sub(".*/in/([^/]+)/?$", "\\1", df_1[[col]])
}

正则说明

两种方法用到的正则逻辑一致:

  • (?<=in/)[^/]+:正向断言确保匹配in/之后的内容,[^/]+匹配所有非斜杠字符,直到遇到下一个斜杠停止。
  • .*/in/([^/]+)/?$:匹配任意字符直到in/,捕获括号内的内容(ID),/?兼容链接末尾有无斜杠的情况。

内容的提问来源于stack exchange,提问作者Soph2010

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:31:02