Как применить нечеткий поиск в r фреймах данных - PullRequest
0 голосов
/ 04 марта 2020

У меня есть 2 кадра данных. 1. У df1 есть данные о продажах с неструктурированными заголовками из куба OLAP.

df1 <- data.frame("[Time].[Fiscal Year].[Fiscal Year].[MEMBER_CAPTION]"= c("FY18","FY19","FY20"), "[Measures].[USD]"=c(100,200,300))
names(df1) <- c("[Time].[Fiscal Year].[Fiscal Year].[MEMBER_CAPTION]","[Measures].[USD]")
У df2 есть список неструктурированных заголовков и соответствующих очищенных заголовков.
df2<- data.frame("RawHeaderName"=c("[Time].[Fiscal Year]","[Measures].[USD]"),"ReportDisplayName"=c("FiscalYear","USD"))

Мое требование - когда значение df2 $ RawHeaderName совпадает (нечеткие совпадения) с заголовками df1, тогда мне нужно заменить заголовки df1 со значением df2 $ ReportDisplayName. Окончательный вывод должен быть, как показано ниже.

FinalOutput <- data.frame("FiscalYear" =c("FY18","FY19","FY20"),"USD"=c(100,200,300))

Пожалуйста, помогите мне решить проблему. Я уже пробовал с библиотеками ("fuzzyjoin"), библиотеками ("dplyr"), но не повезло.

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

После некоторого ускорения приведенный ниже код помогает мне решить проблему 50% только при наличии критериев соответствия. Еще нужно исследовать нечеткие совпадения.

библиотека ("dplyr")

df1 <- data.frame("[Time].[Fiscal Year].[Fiscal Year].[MEMBER_CAPTION]"= c("FY18","FY19","FY20"), "[Measures].[USD]"=c(100,200,300))
names(df1) <- c("[Time].[Fiscal Year].[Fiscal Year].[MEMBER_CAPTION]","[Measures].[USD]")


df2<- data.frame("RawHeaderName"=c("[Time].[Fiscal Year].[Fiscal Year].[MEMBER_CAPTION]","[Measures].[USD]"),"ReportDisplayName"=c("FiscalYear","USD"))


Extract_Headers <- (names(df1))
Extract_Headers <- data.frame("Headers"=as.character(Extract_Headers))
df2$RawHeaderName <- as.character(df2$RawHeaderName)
df2$ReportDisplayName <- as.character(df2$ReportDisplayName)
Cleansed_Headers <- Extract_Headers %>% inner_join (df2, by =c("Headers"="RawHeaderName"))
names(df1)<- Cleansed_Headers$ReportDisplay
0 голосов
/ 04 марта 2020

Я думаю, вы просто ищете names(df1) <- c('Fiscal Year', 'USD'), который изменяет df1 на:

  Fiscal Year USD
1        FY18 100
2        FY19 200
3        FY20 300
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...