如果找到特定的单词,如何在一行句子中的单词中添加一个尾随字母

时间:2017-03-23 19:00:27

标签: r string

这是我的样本数据

x <-  c(1, 2, 3, 4, 5) 
y <- c("apple, red, orange, vintage, classic", "pear, plums, oranges/clementines", "mangos, red, guava, pear", "grapes, strawberry, blackberry", "raspberry, red, blue/green")

mydata <- data.frame(x, y)

我想使用y列创建一个新列。对于列y中具有单词“red”的每行数据,所有单词都得到一个尾随字母“r”,因此新列“z”的row1将是&#34; appler,redr,oranger,vintager ,经典“。不包含单词“red”的行保持不变。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

使用strsplit的另一种方法,{mydatastringsAsfactors = FALSE一起阅读

v1 <- grepl('red', mydata$y) #Identify rows with "red"

mydata$y[v1] <- sapply(strsplit(mydata$y[v1], ', '), function(i) toString(paste0(i, 'r')))                                                                

mydata
#  x                                         y
#1 1 appler, redr, oranger, vintager, classicr
#2 2          pear, plums, oranges/clementines
#3 3              mangosr, redr, guavar, pearr
#4 4            grapes, strawberry, blackberry
#5 5             raspberryr, redr, blue/greenr

答案 1 :(得分:0)

这似乎是一个非常奇怪的转换,但您可以使用正则表达式来查找“红色”并添加“r”。

mydata <- data.frame(x, y, stringsAsFactors=FALSE)

match.rows <- grep("\\bred\\b", mydata$y)

mydata$y[match.rows] <- gsub("(\\w)(?=(,|$))","\\1r", mydata$y[match.rows], perl=T)

导致

mydata
#   x                                         y
# 1 1 appler, redr, oranger, vintager, classicr
# 2 2          pear, plums, oranges/clementines
# 3 3              mangosr, redr, guavar, pearr
# 4 4            grapes, strawberry, blackberry
# 5 5             raspberryr, redr, blue/greenr