繁体   English   中英

r 去掉列名中特殊字符后的部分

[英]r Remove parts of column name after special characters

问题

我有一个 dataframe,我在其中尝试重命名具有多个特殊字符、不同位数并且还包括正数和负数的列条目,如下例所示。

Name  Number
A     -500--550
B     -600--650
C     -700--750
D     -8000--8500
E     -9000--9500
F     -100-200
G     200-400

这些条目是日期范围,中间的连字符应该表示“到”,因此“A”将被读作“负 500 到负 550”; “F”将被读作“负 100 到(正)200”; G 将被读作“(200 到 400)。

在许多条目的开头有一个“-”,在中间有一个“--”和不同的数字使事情变得有点复杂。 对于我的最终结果,我想删除“to”破折号和之后的所有内容。 最终结果应如下所示:

Name  Number
A     -500
B     -600
C     -700
D     -8000
E     -9000
F     -100
G      200

dplyr 方法会很棒,但只要它有效,我就不会特别挑剔。

类似问题

我发现了一些接近提供答案的类似问题,但数据集的差异导致了问题。

在这个例子中,他们在点“.”之后有不同的位数,并使用 gsub 来解决这个问题。 删除列标题中“.”之后的字符

colnames(df) <- gsub("\\..*$", "", colnames(df))

在另一个例子中,他们有多个点“。” 并想删除最后一个“。”。 删除(或替换)R 字符串中指定字符后的所有内容

其中一种方法使用了 stringr,如下所示。

library(stringr)
str_remove(x, "\\.[^.]*$")

这里的问题是,对于许多条目,我想从第二个“-”开始删除,但这对行“F”或“G”不起作用

str_remove(testing$Number, "\\--[^-]*$")
[1] "-500"     "-600"     "-700"     "-8000"    "-9000"    "-100-200" "200-400" 

样本数据

我在下面提供了一个示例测试集。

structure(list(Name = c("A", "B", "C", "D", "E", "F", "G"), Number = c("-500--550", 
"-600--650", "-700--750", "-8000--8500", "-9000--9500", "-100-200", 
"200-400")), class = "data.frame", row.names = c(NA, -7L))

我会替换模式-+\d+$

testing$Number <- sub("-+\\d+$", "", testing$Number)

这是一个有效的正则表达式演示

这里使用的正则表达式表示匹配:

  • -+一个或多个破折号
  • \d+后跟一位或多位数字
  • $值的结尾

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM