簡體   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