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

如何在R语言中保留remission列与lifetime列匹配的取值?

解决方案:筛选remission列中存在于lifetime的物质

针对你的需求,这里提供两种R语言的实现方式,核心逻辑是把逗号分隔的字符串拆成单个物质的集合,取两者的交集后再合并成字符串,空交集则返回空值。

方法一:用tidyverse工具链(推荐,代码更简洁)

先加载tidyverse包,它整合了dplyr(数据处理)、stringr(字符串操作)和purrr(迭代处理):

library(tidyverse)

# 处理数据
df_processed <- df %>%
  mutate(
    # 把两列的字符串拆成物质列表
    lifetime_list = str_split(lifetime, ","),
    remission_list = str_split(remission, ","),
    # 逐行筛选匹配的物质
    remission_filtered = map2_chr(remission_list, lifetime_list, ~{
      matched_items <- intersect(.x, .y)
      # 没匹配到就返回空字符串,否则合并成逗号分隔的格式
      if(length(matched_items) == 0) "" else str_c(matched_items, collapse = ",")
    })
  ) %>%
  # 移除中间辅助列并 rename 回原列名
  select(lifetime, remission_filtered) %>%
  rename(remission = remission_filtered)

# 查看处理后的数据
print(df_processed)

代码说明

  • str_split():把每一行的逗号分隔字符串拆成单个物质的向量,比如第一行lifetime会变成c("tobacco", "alcohol", "cannabis", "cocaine", "stim")。
  • map2_chr():同时遍历每一行的remission和lifetime列表,用intersect()取两者的交集(即同时存在的物质)。
  • 最后判断交集是否为空,空则返回"",否则用逗号合并成原格式的字符串。

方法二:Base R实现(无需额外安装包)

如果不想加载第三方包,可以用Base R的循环来处理:

# 创建处理后的副本
df_processed_base <- df

# 逐行遍历处理
for(i in seq(nrow(df_processed_base))){
  # 拆分字符串为向量
  lifetime_items <- strsplit(df_processed_base$lifetime[i], ",")[[1]]
  remission_items <- strsplit(df_processed_base$remission[i], ",")[[1]]
  
  # 筛选匹配的物质
  matched <- intersect(remission_items, lifetime_items)
  
  # 更新remission列
  df_processed_base$remission[i] <- if(length(matched) == 0) "" else paste(matched, collapse = ",")
}

# 查看结果
print(df_processed_base)

处理后的预期结果

处理后remission列的内容如下:

  1. ""(rx不在第一行的lifetime里)
  2. "cannabis,inhal"(仅这两个物质存在于第二行的lifetime)
  3. "tobacco"(仅tobacco存在于第三行的lifetime)
  4. "cocaine"(仅cocaine存在于第四行的lifetime)
  5. "alcohol,cocaine,stim,rx,halluc,dissoc,tranq,inhal"(这些物质都在第五行的lifetime里)
  6. "cannabis"(仅cannabis存在于第六行的lifetime)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:55:31