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

在R语言中如何将3个字符串列合并为不含NA的列表列?

解决方案:合并多列为列表列并自动剔除NA值

基础R修改方案

直接自定义过滤NA的函数传入Map,替换原有的c函数即可:

df <- tibble::tribble(
  ~X,    ~Y,    ~R,
  "x1",  "y1", "r1",
  "x2",  "y2", "r2",
  "x3",  "y3", NA,
)

# 自定义函数:合并后过滤NA
df$Z <- Map(function(x, y, r) {
  combined <- c(x, y, r)
  combined[!is.na(combined)]
}, df$X, df$Y, df$R)

# 验证结果
df$Z[3] # 输出:[[1]] "x3" "y3"
class(df$Z) # [1] "list"

tidyverse方案(更简洁)

如果习惯用tidyverse工具链,推荐两种实现方式:

方法1:purrr::pmap

library(purrr)
df$Z <- pmap(df[, c("X", "Y", "R")], ~ c(...) %>% discard(is.na))

方法2:dplyr rowwise + c_across

library(dplyr)
df <- df %>%
  rowwise() %>%
  mutate(Z = list(c_across(X:R)[!is.na(c_across(X:R))])) %>%
  ungroup()

核心逻辑

所有方案的本质一致:按行合并多列值后,筛选掉其中的NA元素,确保列表列的每个元素只保留非空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:05:37