簡體   English   中英

從多個字母和數字字符串中減去1個字母和數字

[英]Subtract 1 letter and number from multiple strings of letters and numbers

我有一個字符串向量:

grid_loc <- c("B2", "B3", "B4", "C2", "C3", "C4", "D2", "D3", "D4")

我怎樣才能重新編碼這些字符串,以便新的矢量看起來像這樣?:

c("A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3")

如您所見,我希望每個字母和數字字符串都從中減去“一”。 B變為A3變為2等。

在原始數據集中,沒有包含字母A或數字1字符串,因此弄清楚如何處理這種情況不是問題。

我試圖使用gsub()手動重新編碼每個字符串,但由於真實數據集的大小,這太費力了。

另一種方法,使用base R可以在帶有strsplit的字母之后split每個元素,計算每個部分的“減1”操作並重新調整它們:

sapply(strsplit(c(grid_loc, "B20"), "(?<=[B-Z])", perl=TRUE), 
       function(x) paste0(LETTERS[match(x[1], LETTERS)-1], as.numeric(x[2])-1))
#  [1] "A1"  "A2"  "A3"  "B1"  "B2"  "B3"  "C1"  "C2"  "C3"  "A19"

如果原始向量中沒有“A”或“1”,則一個選項是使用gsubfn減去數字並將字母替換為前面的字母

library(gsubfn)
f1 <- function(x, y) paste0(LETTERS[match(x, LETTERS)-1], as.numeric(y) - 1)
gsubfn('([A-Z])([0-9]+)', f1, grid_loc)
#[1] "A1"  "A2"  "A3"  "B1"  "B2"  "B3"  "C1"  "C2"  "C3"  "A19"

數據

grid_loc <- c("B2", "B3", "B4", "C2", "C3", "C4", "D2", "D3", "D4", "B20")

這里純粹是基礎R方式:

fun=function(x){paste0(LETTERS[match(sub("[^A-Z]+","",x),LETTERS)-1],
              as.numeric(sub("\\D+","",x))-1)}
fun(x)
 [1] "A1"  "A2"  "A3"  "B1"  "B2"  "B3"  "C1"  "C2"  "C3"  "A19"

數據

x=c("B2", "B3", "B4", "C2", "C3", "C4", "D2", "D3", "D4", "B20")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM