R语言:如何批量删除数据框单元格内各子串竖线后的内容?
解决R语言DataFrame单元格内容处理问题
你的问题出在正则表达式的贪婪匹配上:\\|.*中的.*会从第一个|开始匹配到字符串的末尾,所以只保留了第一个子串的前半部分。下面提供两种可行的解决方法:
方法一:调整正则表达式(推荐)
使用\\|[^;]*作为匹配规则,其中[^;]*表示匹配任意非分号的字符(零个或多个),这样只会删除每个分号分隔子串内第一个|之后的内容,不会跨过分号影响其他子串:
bla = data.frame(mycol = "bla_v2_2072|ID:61462952|;bla_v2_0113|ID:61460993|") bla$mycol_cleaned <- gsub("\\|[^;]*", "", bla$mycol) # 查看结果 bla$mycol_cleaned # 输出:"bla_v2_2072;bla_v2_0113"
方法二:拆分-处理-合并
先将字符串按分号拆分为独立子串,逐个处理后再合并:
bla = data.frame(mycol = "bla_v2_2072|ID:61462952|;bla_v2_0113|ID:61460993|") # 拆分字符串 split_parts <- strsplit(bla$mycol, ";")[[1]] # 对每个子串删除第一个|后的内容 cleaned_parts <- sapply(split_parts, function(x) gsub("\\|.*", "", x)) # 合并为原格式 bla$mycol_cleaned <- paste(cleaned_parts, collapse = ";")
内容的提问来源于stack exchange,提问作者Saraha
相关产品推荐
相关产品推荐

