这是我的样本数据
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”的行保持不变。
感谢您的帮助
答案 0 :(得分:1)
使用strsplit
的另一种方法,{mydata
与stringsAsfactors = 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