在R中使用ifelse将dataframe的stage o-x数据修改为stage o的方法
R实现数据框内stage格式批量替换的方法
核心思路
你要实现的格式转换本质是提取stage 后第一个数字的部分,丢弃-及后面的内容,用正则匹配+替换可以实现,如需结合ifelse做格式合法性判断,可参考以下代码:
完整可运行代码
# 初始构造数据框 x = c("stage 1-1", "stage 2-2", "stage 3-2") y = c("stage 1-1", "stage 1-2", "stage 2-2") z = c("stage 3-2", "stage 2-1", "stage 3-4") df <- data.frame(x, y, z, stringsAsFactors = FALSE) # 批量处理所有列 df[] <- lapply(df, function(col) { # ifelse判断:符合stage o-x格式才替换,否则保留原值 ifelse(grepl("^stage \\d+-\\d+$", col), sub("(stage \\d+)-\\d+", "\\1", col), col) })
代码说明
grepl("^stage \\d+-\\d+$", col):判断每个值是否严格匹配stage 数字-数字的格式,避免误改其他不符合格式的内容sub("(stage \\d+)-\\d+", "\\1", col):正则捕获stage加第一个数字的部分,替换掉整个原字符串,实现只保留stage o的需求- 用
lapply遍历数据框所有列,不用逐个修改x/y/z列,列数多的时候也适用
运行后打印df即可看到所有值都已经完成转换,例如原stage 3-4会自动修改为stage 3。
内容的提问来源于stack exchange,提问作者AYNN
相关产品推荐
相关产品推荐

