你好,我在data.frame中有一列,它有很多行,例如
df = data.frame("Species" = c("*Briza minor", "*Briza minor", "Wattle"))
我想创建一个新列“ Species_new”,其中“ *”移到字符串的末尾,例如
df = data.frame("Species" = c("*Briza minor", "*Briza minor", "Wattle"),
"Species_new" = c("Briza minor*", "Briza minor*", "Wattle"))
是否可以使用gsub做到这一点?手动示例将花费太长时间,因为我大约有50,000行。
预先感谢
答案 0 :(得分:3)
一种选择是将*
捕获为一个组,并在replacement
中反转后向引用
df$Species_new <- sub("^([*])(.*)$", "\\2\\1", df$Species)
df$Species_new
#[1] "Briza minor*" "Briza minor*" "Wattle"
注意:*
是一个元字符,表示0或更大,因此我们可以转义(\\*
或将其放在方括号([]
)中以评估原始字符,即文字评估
答案 1 :(得分:0)
非常感谢您的快速响应,我也找到了解决方法;
df$Species_new = sub("[*]","",df$Species, perl=TRUE)
differences = setdiff(df$Species,df$Species_new)
tochange = subset(df,df$Species == differences)
toleave = subset(df,!df$Species == differences)
tochange$Species_new = paste(tochange$Species_new, "*", sep = "")
df = rbind(tochange,toleave)