2017-08-31 70 views
2

我已在數據幀替代字符串,而不改變其他嵌入式串

df <- data.frame(c(1, 2, 3, 4), c("T-A1", "T-A1-2", "T-A1-3", "T-A1-4"), c("apple", "banana", "pear", "orange")) 
names(df) <- c("num", "name", "fruit") 

    num name fruit 
1 1 T-A1 apple 
2 2 T-A1-2 banana 
3 3 T-A1-3 pear 
4 4 T-A1-4 orange 

我需要改變 「T-A1」 至 「T-A1-1」

num name fruit  num name fruit 
1 1 T-A1 apple  1 1 T-A1-1 apple 
2 2 T-A1-2 banana -> 2 2 T-A1-2 banana 
3 3 T-A1-3 pear  3 3 T-A1-3 pear 
4 4 T-A1-4 orange  4 4 T-A1-4 orange 

我已經使用以下這個功能:

df$name <- gsub("T-A1", "T-A1-1", df$name) 

但結果我得到的是這樣一個:

num name fruit 
1 1 T-A1-1 apple 
2 2 T-A1-1-2 banana 
3 3 T-A1-1-3 pear 
4 4 T-A1-1-4 orange 

我又試圖這個公式:

df$name <- gsub("T-A1", "T-A1-1", df$name, fixed = TRUE) 

但如前所述我仍然得到同樣的結果。

當它的唯一「T-A1」嵌套在任何其他詞語中,無論是在乞討,中間還是結尾時,理想情況是能夠替換「T-A1」。換句話說,如果某些條目看起來像這個「T-A1-word」,「word-T-A1」或「wo-T-A1-rd」,他們仍然不應該受到影響,他們的「T-A1」部分仍然保持完好。我想替換「T-A1」的唯一時間就是它本身就是「T-A1」。

R version 3.4.1 Winodws 7 64 bit

回答

2

你需要告訴gsubT-A1就是你正在尋找確切的字符串。

df$name <- gsub("^T-A1$", "T-A1-1", df$name) 

## num name fruit 
## 1 1 T-A1-1 apple 
## 2 2 T-A1-2 banana 
## 3 3 T-A1-3 pear 
## 4 4 T-A1-4 orange 

這工作,因爲$告訴gsubT-A1應在字符串的結尾處發生,^告訴它應該是它的開始。取決於您的實際數據集,您可能需要使用不同的表達式。

This regex-faq可以給你一些想法。

相關問題