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

R语言如何为列表内对应数据框yn为No的整数前添加负号并保留结构

实现方案

方案1:tidyverse 版本(易读性高)

library(tidyverse)

# 批量处理n字段内容
new_n <- list$name %>% 
  map_chr(function(cur_name) {
    # 拆分当前name对应的原n字符串为整数向量
    origin_nums <- str_split(list$n[list$name == cur_name], ",\\s*")[[1]] %>% as.integer()
    # 匹配df的yn标记,给No对应的数值添加负号
    modified_nums <- map_chr(origin_nums, function(num) {
      yn_tag <- df$yn[df$name == cur_name & df$n == num]
      ifelse(yn_tag == "No", paste0("-", num), as.character(num))
    })
    # 重新拼接为逗号分隔的字符串
    paste(modified_nums, collapse = ", ")
  })

# 替换原列表的n字段,其余结构保持不变
list$n <- new_n

运行后输出验证:

> list$n
[1] "1, 2, -3, -4, 5"   "-6, 7, 8"          "9, 10"             "-11, 12, 13, -14"  "15, 16, 17"

方案2:base R 版本(无额外依赖)

new_n <- character(length(list$name))
for (i in seq_along(list$name)) {
  cur_name <- list$name[i]
  # 拆分原n字符串
  origin_nums <- as.integer(strsplit(list$n[i], ",\\s*")[[1]])
  modified_nums <- character(length(origin_nums))
  # 逐个数值匹配yn标记
  for (j in seq_along(origin_nums)) {
    num <- origin_nums[j]
    yn_tag <- df$yn[df$name == cur_name & df$n == num]
    modified_nums[j] <- ifelse(yn_tag == "No", paste0("-", num), as.character(num))
  }
  new_n[i] <- paste(modified_nums, collapse = ", ")
}
# 替换n字段
list$n <- new_n

说明

  • 两种实现均符合题目前置条件,不会修改原列表的name、type字段,仅更新n字段内容
  • 自动适配n字段中不同长度的数值串,无需手动调整参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:09:02