在R语言中如何根据指定条件交换两列的数值?
实现方法
方法1:base R(无需额外安装包)
直接定位需要互换的行,批量替换两列的值即可,逻辑简单性能好:
# 定位d_code不是以7/8开头的行 swap_rows <- !grepl("^[78]", sample_df$d_code) # 互换对应行的d_code和c_code sample_df[swap_rows, c("d_code", "c_code")] <- sample_df[swap_rows, c("c_code", "d_code")]
方法2:tidyverse风格(dplyr+stringr)
如果你习惯用tidyverse语法,可以用mutate结合字符串匹配实现,可读性更高:
library(dplyr) library(stringr) result_df <- sample_df %>% mutate( need_swap = !str_starts(d_code, "^[78]"), tmp = d_code, d_code = ifelse(need_swap, c_code, d_code), c_code = ifelse(need_swap, tmp, c_code) ) %>% select(-need_swap, -tmp)
运行后得到的结果和期望输出完全一致:
sum d_code c_code 1 98 7300 1200 2 73 8300 1500 3 62 8400 1050
内容的提问来源于stack exchange,提问作者user000
相关产品推荐
相关产品推荐

