在不改变其他嵌入字符串的情况下替换字符串
Substitute String without altering other embedded strings
我有以下数据框
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
您需要告诉 gsub
T-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
这是有效的,因为 $
告诉 gsub
T-A1
应该出现在字符串的最后,而 ^
告诉它应该是它的开头.取决于您的实际数据集,您可能需要使用不同的 regex 表达式。
这个regex-faq可以给你一些想法。
我有以下数据框
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
您需要告诉 gsub
T-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
这是有效的,因为 $
告诉 gsub
T-A1
应该出现在字符串的最后,而 ^
告诉它应该是它的开头.取决于您的实际数据集,您可能需要使用不同的 regex 表达式。
这个regex-faq可以给你一些想法。