Заменить символьный столбец числами - PullRequest
0 голосов
/ 01 июня 2018

У меня есть df вроде этого:

df <- 
ID                  ID2
Subject 10010-001   NA
Subject 20010-002   NA

Я хочу избавиться от чего-либо до - и сохранить номер.Результат должен быть таким:

df <-
ID                  ID2
Subject 10010-001   001
Subject 20010-002   002

Я пытался использовать gsub, но все еще не понял это правильно.Это то, что я пробовал.

df$ID2 <- as.numeric(gsub("Subject \\d+-","",as.character(df$ID)))

Я использую RStudio.

1 Ответ

0 голосов
/ 01 июня 2018

Вы можете сделать это и с помощью strsplit, если вы не готовы к регулярному выражению.

do.call('rbind',lapply(strsplit(c("Subject 10010-001", "Subject 20010-002"),"-"),`[[`,2))

Здесь strsplit разделит ваши данные с помощью «-», а затем мы выберем второй элемент из вывода strsplitиспользуя lapply и [[.Окончательный результат можно поместить в столбцовое представление, используя do.call, здесь вы также можете выбрать unsplit.Приведенный выше вывод представляет собой матрицу с символьными данными.Вы можете использовать data.frame, чтобы поместить его в нужную форму.

или лучше , как предложено @ thelatemail

 sapply(strsplit(c("Subject 10010-001", "Subject 20010-002"),"-"),`[[`,2)

Здесь применяется та же логика, но онагораздо менее громоздким, так как вам не нужно ничего связывать, так как мы используем sapply вместо lapply.

Ваше существующее регулярное выражение кажется правильным , единственная проверкаЯ думаю, вы не должны использовать as.numeric там, если вы хотите 00 спереди.

...