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

在R语言中基于direction列的条件交换col1与col2列指定行的内容

解决方案:处理direction列并交换col1/col2值

针对你的需求,我提供两种基于tidyverse的实现方案,分别对应修改原数据框和生成新列保存结果两种场景:

方案1:直接修改原数据框

我们可以用mutate()结合case_when()来条件性地交换col1和col2的值,并统一将direction设为"+":

library(tidyverse)

# 原始数据框
df <- tibble(col1=c(1,10,100,40,1000), col2=c(15,20,50,80,2000), direction=c("+","+","-","+","+"), score=c(50,100,300,10,300))

# 修改原数据框
df <- df %>%
  mutate(
    # 当direction为"-"时交换col1和col2,否则保持原值
    col1 = case_when(direction == "-" ~ col2, TRUE ~ col1),
    col2 = case_when(direction == "-" ~ col1, TRUE ~ col2),
    # 统一将direction设为"+"
    direction = "+"
  )

# 查看结果
df

执行后你会得到符合要求的修改后的数据框。

方案2:生成新列保存处理结果

如果不想改动原始数据,我们可以创建新列来存储处理后的值:

library(tidyverse)

# 原始数据框
df <- tibble(col1=c(1,10,100,40,1000), col2=c(15,20,50,80,2000), direction=c("+","+","-","+","+"), score=c(50,100,300,10,300))

# 生成新列
df_new <- df %>%
  mutate(
    new_col1 = case_when(direction == "-" ~ col2, TRUE ~ col1),
    new_col2 = case_when(direction == "-" ~ col1, TRUE ~ col2),
    new_direction = "+"
  )

# 查看结果
df_new

这个方案会保留原始列,同时新增new_col1、new_col2和new_direction三个列来存储处理后的结果。

补充说明

  • case_when()在这里比if_else()更灵活,适合多条件判断的场景,这里我们只用到了一个条件,也可以换成if_else(direction == "-", col2, col1)来实现同样的效果。
  • 两种方案都完全基于tidyverse语法,和你现有的代码风格保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:28:10