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

在R中拼接DataFrame非“ok”值并生成新列的实现方法

解决方案

方法一:使用dplyr的行操作

通过rowwise()实现逐行处理,结合c_across()选中目标列,筛选非"ok"值后拼接:

library(dplyr)

# 构造原始数据
A = c("ok","WA","WA","ok","WA")
B = c("WB","ok","ok","ok","WB")
C = c("WC","ok","WC","ok","WC")
df = tibble(A,B,C)

# 生成新列D
df <- df %>%
  rowwise() %>%
  mutate(D = {
    # 提取当前行非"ok"的所有值
    non_ok_vals <- c_across(A:C)[c_across(A:C) != "ok"]
    # 根据是否有非ok值返回对应结果
    if (length(non_ok_vals) == 0) "NO W" else paste(non_ok_vals, collapse = ",")
  }) %>%
  ungroup()

# 查看结果
df

方法二:使用purrr的函数式逐行处理

如果偏好函数式编程风格,可以用pmap_chr()逐行遍历数据框:

library(dplyr)
library(purrr)

# 构造原始数据(如果已定义可跳过)
A = c("ok","WA","WA","ok","WA")
B = c("WB","ok","ok","ok","WB")
C = c("WC","ok","WC","ok","WC")
df = tibble(A,B,C)

# 生成新列D
df <- df %>%
  mutate(D = pmap_chr(., ~{
    # 获取当前行的所有值
    row_vals <- c(...)
    # 筛选非"ok"值
    non_ok_vals <- row_vals[row_vals != "ok"]
    # 返回拼接结果或默认文本
    if (length(non_ok_vals) == 0) "NO W" else paste(non_ok_vals, collapse = ",")
  }))

# 查看结果
df

两种方法都能得到预期结果,方法一贴合dplyr管道风格,方法二更适合处理复杂逐行逻辑。

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:32:33