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

如何按自定义分割符将R的df数据框拆分为嵌套df.listing列表

看起来你想要的是按指定分割符(A和B)将数据框拆分为连续的块,并且合并连续以相同分割符开头的块。原来的split(df, df$m %in% keyword_cutoff)方法只能把数据分成“是分割符”和“不是分割符”两组,显然不符合需求。下面分步实现你的目标:

步骤1:实现阶段1的分割结果

我们可以通过标记分割符的位置,然后用cumsum生成每个块的分组ID,这样就能把每个以分割符开头的连续部分拆分成单独的块:

# 你的原始数据
df <- data.frame(m=c("A","T","W","Z","B","A","A","W","T","K","G","B","T","B"))
index_cutoff <- c("A","B")

# 标记哪些行是分割符
is_cutoff <- df$m %in% index_cutoff

# 生成每个块的分组ID:每次遇到分割符,分组ID+1
group_ids <- cumsum(is_cutoff)

# 按分组ID拆分,得到阶段1的结果
df.listing_stage1 <- split(df$m, group_ids)

运行后,df.listing_stage1就是你要的阶段1输出:

df.listing_stage1[[1]]
# [1] "A" "T" "W" "Z"
df.listing_stage1[[2]]
# [1] "B"
df.listing_stage1[[3]]
# [1] "A"
df.listing_stage1[[4]]
# [1] "A" "W" "T" "K" "G"
df.listing_stage1[[5]]
# [1] "B" "T"
df.listing_stage1[[6]]
# [1] "B"

步骤2:合并连续以相同分割符开头的块

接下来需要把连续以相同分割符开头的块合并成嵌套列表。我们先获取每个块的第一个元素(也就是分割符),然后把连续相同起始符的块归为一组,再拆分成嵌套列表:

# 获取每个块的第一个元素(即分割符)
start_vals <- sapply(df.listing_stage1, function(x) x[1])

# 生成合并分组:当当前块的起始符和前一个不同时,分组ID+1
merge_group_ids <- c(1, cumsum(start_vals[-1] != start_vals[-length(start_vals)]))

# 按合并分组拆分,得到最终的嵌套列表
df.listing_final <- split(df.listing_stage1, merge_group_ids)

现在查看最终结果,完全符合你的期望:

df.listing_final[[1]]
# [[1]]
# [1] "A" "T" "W" "Z"

df.listing_final[[2]]
# [[1]]
# [1] "B"

df.listing_final[[3]]
# [[1]]
# [1] "A"
# [[2]]
# [1] "A" "W" "T" "K" "G"

df.listing_final[[4]]
# [[1]]
# [1] "B" "T"
# [[2]]
# [1] "B"

如果想要打印时更贴近你展示的格式,可以用lapply遍历打印每个元素:

lapply(df.listing_final, function(block) {
  lapply(block, function(x) cat(x, "\n"))
})

输出:

A T W Z 
B 
A 
A W T K G 
B T 
B 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:28:30