Переместить «*» в новый столбец в R - PullRequest
0 голосов
/ 21 января 2019

Здравствуйте, у меня есть столбец в 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 голосов
/ 21 января 2019

Большое спасибо за быстрый ответ, я также нашел обходной путь;

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)
0 голосов
/ 21 января 2019

Один из вариантов - захватить * как группу, а в replacement перевернуть обратные ссылки

df$Species_new <- sub("^([*])(.*)$", "\\2\\1", df$Species)
df$Species_new
#[1] "Briza minor*" "Briza minor*" "Wattle"    

ПРИМЕЧАНИЕ: * - это метасимвол, означающий 0 или более, поэтому мы можем либоэкранировать (\\*) или поместить его в скобки ([]) для оценки необработанного символа, то есть буквального вычисления

...