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

R语言:匹配含列表的数据框元素并保留目标数据框行数

问题描述

我有两个数据框,其中一个的列包含不同元素数量的列表:

df_1 <- as.data.frame(matrix(c(2, 5, 6, 7), 2, 2))

list_1 <- list(list('joe'), list('mia'), list(1,2,3), list(1,3), list(2,5,4,8), list(4,5,7,8))

df_2  <-  as.data.frame(matrix(list_1, 2, 3))

我希望用df_1[1,1]和df_1[2,1]匹配df_2的第二列,用df_1[1,2]和df_1[2,2]匹配df_2的第三列,尝试了以下代码:

A1 <- grepl(df_1[1,1],unlist(df_2[,2])) 
A2 <- grepl(df_1[2,1],unlist(df_2[,2])) 
A3 <- grepl(df_1[1,2],unlist(df_2[,3])) 
A4 <- grepl(df_1[2,2],unlist(df_2[,3])) 

(注:本例不使用unlist也能运行,但实际数据必须用unlist才能执行,不过效果仍不理想)

当前得到的结果是长度不一致的逻辑向量:

A1: FALSE  TRUE FALSE FALSE FALSE
A2: FALSE FALSE FALSE FALSE FALSE
A3: FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
A4: FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE

我需要将这些结果整理成一个2×2的数据框(对应df_2的2行和2组匹配项),每个单元格保留对应匹配的逻辑向量,期望结构如下:

(FALSE TRUE FALSE)  (FALSE FALSE FALSE FALSE)
(FALSE FALSE)       (FALSE FALSE TRUE FALSE)
解决方案

核心思路是针对df_2每一行的列表元素,逐个匹配df_1的目标值,将每个匹配的逻辑向量保留为列表元素,最终组合成目标数据框:

# 原始数据定义
df_1 <- as.data.frame(matrix(c(2, 5, 6, 7), 2, 2))
list_1 <- list(list('joe'), list('mia'), list(1,2,3), list(1,3), list(2,5,4,8), list(4,5,7,8))
df_2  <-  as.data.frame(matrix(list_1, 2, 3))

# 定义匹配函数:检查列表中每个元素是否等于目标值
match_target <- function(target, lst) {
  sapply(lst, function(x) x == target)
}

# 生成2×2的结果数据框
result_df <- data.frame(
  # 第一列:匹配df_1的第1列与df_2的第2列
  group1 = list(
    match_target(df_1[1, 1], df_2[1, 2][[1]]),
    match_target(df_1[2, 1], df_2[2, 2][[1]])
  ),
  # 第二列:匹配df_1的第2列与df_2的第3列
  group2 = list(
    match_target(df_1[1, 2], df_2[1, 3][[1]]),
    match_target(df_1[2, 2], df_2[2, 3][[1]])
  )
)

# 查看结果
print(result_df)

运行后输出的result_df即为期望的结构:

group1                 group2
1 FALSE, TRUE, FALSE FALSE, FALSE, FALSE, FALSE
2       FALSE, FALSE       FALSE, FALSE, TRUE, FALSE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:02:44