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

R dplyr实战:按条件交换dataframe中指定两列的元素

R实现按行交换x、y列(保证x≤y)的方法

方法1:dplyr + 向量化运算(最高效,无需逐行遍历)

核心思路是用pmin()取每行两个值的最小值赋值给x,pmax()取最大值赋值给y,自动完成满足条件的行交换,其他列完全不受影响:

library(dplyr)

# 示例数据
df <- tibble(x=1:10, y=10:1, extra=LETTERS[1:10])

# 处理逻辑
df_new <- df %>%
  mutate(
    x_new = pmin(x, y),
    y_new = pmax(x, y)
  ) %>%
  # 替换原列、保留其余所有列
  select(x = x_new, y = y_new, everything())

运行后df_new的输出结果如下:

# A tibble: 10 × 3
       x     y extra
   <int> <int> <chr>
 1     1    10 A    
 2     2     9 B    
 3     3     8 C    
 4     4     7 D    
 5     5     6 E    
 6     5     6 F    
 7     4     7 G    
 8     3     8 H    
 9     2     9 I    
10     1    10 J

方法2:基础R实现(无需加载第三方包)

逻辑更直观,直接定位需要交换的行批量操作,性能优异:

# 找到所有x>y的行下标
swap_rows <- df$x > df$y
# 交换对应行的x、y值
df[swap_rows, c("x", "y")] <- df[swap_rows, c("y", "x")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:54:03