Извлечение определенных слов с помощью регулярного выражения или подстроки из столбца в R - PullRequest
0 голосов
/ 02 мая 2018

У меня есть следующие данные:

    Opex_Spend_Month    Opex_Spend_YTD  Major_Category  NBS_Region  Sub_Category
92179.84            113542.84       Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER
297.82              82392.82        Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER
13974.8             34917.8         Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER
138.6               63125.6         Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER
NA                  73097           Contingent Labour   EUROPE  TEMP:MSP NON IT
NA                  96035           Contingent Labour   EUROPE  TEMP:MSP NON IT
1388.65             68934.65        Contingent Labour   EUROPE  TEMP:MSP NON IT
5393.76             18748.76        Contingent Labour   EUROPE  TEMP:MSP IT
528.38              82195.38        Contingent Labour   EUROPE  TEMP:MSP IT
22369               95468           Contingent Labour   EUROPE  TEMP:MSP IT

Из столбца Sub_Category я хочу иметь возможность выбрать последние части Cont Worker, Non IT & IT, и я не уверен, какую функцию регулярного выражения или подстроки использовать.

Желаемый выход

Opex_Spend_Month    Opex_Spend_YTD  Major_Category  NBS_Region  Sub_Category            Category
92179.84            113542.84       Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER    Cont Worker
297.82              82392.82        Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER    Cont Worker
13974.8             34917.8         Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER    Cont Worker
138.6               63125.6         Contingent Labour   EUROPE  TEMP:OTH.CONT.WORKER    Cont Worker
NA                  73097           Contingent Labour   EUROPE  TEMP:MSP NON IT         Non IT
NA                  96035           Contingent Labour   EUROPE  TEMP:MSP NON IT         Non IT
1388.65             68934.65        Contingent Labour   EUROPE  TEMP:MSP NON IT         Non IT
5393.76             18748.76        Contingent Labour   EUROPE  TEMP:MSP IT             IT
528.38              82195.38        Contingent Labour   EUROPE  TEMP:MSP IT             IT
22369               95468           Contingent Labour   EUROPE  TEMP:MSP IT             IT

Может кто-нибудь, пожалуйста, помогите мне с этим ??

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

В базе R:

df$Category = trimws(gsub('([A-Z]+:[A-Z]+|\\.)', ' ', df$Sub_Category))
0 голосов
/ 02 мая 2018
You can do:

 gsub(".*?(\\.|\\s)(\\w+)","\\2 ",dat$Sub_Category)

Вот пример: просто вызовем последние два столбца (5: 6), чтобы вы увидели, что происходит:

transform(dat,category=gsub(".*?(\\.|\\s)(\\w+)","\\2 ",Sub_Category))[5:6]
           Sub_Category     category
1  TEMP:OTH.CONT.WORKER CONT WORKER 
2  TEMP:OTH.CONT.WORKER CONT WORKER 
3  TEMP:OTH.CONT.WORKER CONT WORKER 
4  TEMP:OTH.CONT.WORKER CONT WORKER 
5       TEMP:MSP NON IT      NON IT 
6       TEMP:MSP NON IT      NON IT 
7       TEMP:MSP NON IT      NON IT 
8           TEMP:MSP IT          IT 
9           TEMP:MSP IT          IT 
10          TEMP:MSP IT          IT 
0 голосов
/ 02 мая 2018

Мы можем использовать str_extract

library(stringr)
str_extract(df1$Sub_Category, "(CONT\\.WORKER|NON IT|IT)$")
...