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

如何将列表向量列拼接为单个字符串列?R语言数据处理求助

问题:合并分组列表数据为分隔字符串

原始需求是按day分组,将每组的see字段合并为逗号/空格分隔的字符串,NA对应位置显示为空。尝试的代码如下:

tibble(
 day = c("Mo", "Tu","Tu", "We","Th","Fr","Fr","Fr"),
 see = c("cat", "cat", "dog", NA, "cat","cat","dog","bird" )
) %>% 
 nest(data = see) %>% 
 mutate(see = paste0(data)) %>%  
 select(-data)

但执行后see列返回的是列表的字符串化结果,不符合预期:

# A tibble: 5 × 2
  day   see                                         
  <chr> <chr>                                       
1 Mo    "list(see = \"cat\")"                       
2 Tu    "list(see = c(\"cat\", \"dog\"))"          
3 We    "list(see = NA)"                            
4 Th    "list(see = \"cat\")"                       
5 Fr    "list(see = c(\"cat\", \"dog\", \"bird\"))"

解决方案

问题出在paste0(data)直接把整个嵌套列表转为了字符串,需要遍历每个分组的列表,提取see值并处理NA后再拼接。可以用purrr::map_chr来实现:

library(tibble)
library(dplyr)
library(purrr)

tibble(
 day = c("Mo", "Tu","Tu", "We","Th","Fr","Fr","Fr"),
 see = c("cat", "cat", "dog", NA, "cat","cat","dog","bird" )
) %>% 
 nest(data = see) %>% 
 mutate(
   see = map_chr(data, ~{
     # 提取see列并过滤NA
     vals <- .x$see[!is.na(.x$see)]
     # 如果过滤后为空则返回空字符串,否则用逗号分隔拼接
     if(length(vals) == 0) "" else paste(vals, collapse = ", ")
   })
 ) %>% 
 select(-data)

执行后得到预期结果:

# A tibble: 5 × 2
  day   see              
  <chr> <chr>            
1 Mo    cat              
2 Tu    cat, dog         
3 We    ""               
4 Th    cat              
5 Fr    cat, dog, bird

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:33:26