将“ *”移动到R中的新列

时间:2019-01-21 11:02:41

标签: r character gsub stringr

你好,我在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行。

预先感谢

2 个答案:

答案 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)
相关问题