如何在R语言中根据条件将列值迁移至另一列?
解决方法
基础R实现
由于你的Col1是字符与数值混合的类型,首先需要识别出其中可转换为数值且大于1000000的元素,再进行赋值操作:
# 原始数据(添加stringsAsFactors=FALSE避免字符列转因子) df <- data.frame(Col1 = c(1100000, 5320133, "Teste", "Cor13", "Fell505", 2732154), Col2 = c(0, 0, 1100000, 5320133, 2732154, 0), Col3 = c(0, 0, 0, 0, 0, 0), stringsAsFactors = FALSE) # 创建判断索引:识别Col1中可转为数值且大于1e6的元素 idx <- suppressWarnings(as.numeric(df$Col1)) > 1000000 # 对符合条件的行执行赋值操作 df$Col2[idx] <- df$Col1[idx] df$Col1[idx] <- "" # 查看转换结果 df
执行后即可得到你期望的df_new结构。
dplyr包实现(更简洁)
如果习惯用tidyverse工具链,可通过dplyr的条件赋值完成操作:
library(dplyr) df_new <- df %>% mutate( # 满足条件时将Col1的值替换到Col2,否则保留原Col2 Col2 = case_when( suppressWarnings(as.numeric(Col1)) > 1000000 ~ Col1, TRUE ~ Col2 ), # 满足条件时将Col1置为空字符串,否则保留原值 Col1 = case_when( suppressWarnings(as.numeric(Col1)) > 1000000 ~ "", TRUE ~ Col1 ) ) df_new
关键说明
suppressWarnings用于屏蔽文本转数值时的警告(文本转数值会生成NA,属于正常逻辑)stringsAsFactors = FALSE确保原始数据的字符列不会被自动转为因子类型,避免后续赋值出错
内容的提问来源于stack exchange,提问作者Velton Sousa
相关产品推荐
相关产品推荐

