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
相关产品推荐
相关产品推荐

