gpt4 book ai didi

删除字符串中的运行长度重复数字和 NA

转载 作者:行者123 更新时间:2023-12-04 15:02:05 25 4
gpt4 key购买 nike

我有包含大串十进制数字和 NA 的列:

df <- data.frame(
A_gsr =c("2.752,2.752,2.752,2.752,2.752,2.752,2.752,2.911,2.911,3.555",
"2.999,2.999,2.999,2.752,2.752,2.752,2.752"),
B_gsr = c("1.34,1.34,1.34,1.55,1.55,1.55,1.55,1.55,1.55,1.55",
"1.56,1.56,1.56,1.55,1.55,1.55,1.55,NA,NA,NA,NA,1.34,1.34,1.34"),
C_gsr = c("NA,NA,NA,0.147,0.147,0.147,0.147,0.147,NA",
"0.146,0.146,0.146,0.146,0.146,0.146,0.146,0.146,0.146,0.146")
)

我想删除所有游程重复项。使用 gsub 和反向引用,我已经非常接近我想要的了:

lapply(df[,1:3], function(x) gsub("((\\d\\.\\d+,)|(NA,))\\1+", "\\1", x))
$A_gsr
[1] "2.752,2.911,3.555" "2.999,2.752,2.752"

$B_gsr
[1] "1.34,1.55,1.55" "1.56,1.55,NA,1.34,1.34"

$C_gsr
[1] "NA,0.147,NA" "0.146,0.146"

但是,还不够接近 - 仍然有一些游程重复,都在字符串的末尾。 预期的结果是这样的:

$A_gsr
[1] "2.752,2.911,3.555" "2.999,2.752"

$B_gsr
[1] "1.34,1.55" "1.56,1.55,NA,1.34"

$C_gsr
[1] "NA,0.147,NA" "0.146"

最佳答案

你可以使用

lapply(df[,1:3], function(x) gsub("\\b(\\d+\\.\\d+|NA)(?:,\\1)+\\b", "\\1", x))
## => $A_gsr
## [1] "2.752,2.911,3.555" "2.999,2.752"
##
## $B_gsr
## [1] "1.34,1.55" "1.56,1.55,NA,1.34"
##
## $C_gsr
## [1] "NA,0.147,NA" "0.146"

参见 regex demoR demo online .

详细信息:

  • \b - 单词边界
  • (\d+\.\d+|NA) - 第 1 组:一位或多位数字,.,一位或多位数字,或 NA字符串
  • (?:,\1)+ - 一个或多个逗号和第 1 组中的值的重复
  • \b - 单词边界

关于删除字符串中的运行长度重复数字和 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66800487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com