используя оператор ifelse, но из набора данных в R - PullRequest
0 голосов
/ 15 октября 2018

для создания атрибутов, я могу сделать это

dat$clas <- ifelse(grepl("den", dat$stuff), "bak", 
                  ifelse(grepl("kro", dat$stuff), "bak1", 

  ifelse(grepl("ris", dat$stuff), "bak3",  
         ifelse(grepl("muka", dat$stuff), "rty", 

               ifelse(grepl("chlo", dat$stuff), "cos", 
              ifelse(grepl("prokl", dat$stuff), "gig",  "no"))))))

, но у меня много атрибутов, предположим, что есть 200 атрибутов.Использование такого оператора ifelse требует много времени для написания и будет длинный код.Могу ли я использовать его из dataframe.

templatedata<-prod  clas
den               bak
kro              bak1
ris               bak3
muka            rty
chlo               cos
prokl                gig

)

templatedata=structure(list(prod = structure(c(2L, 3L, 6L, 4L, 1L, 5L), .Label = c("chlo\t", 
"den", "kro\t", "muka", "prokl\t", "ris\t"), class = "factor"), 
    class = structure(c(1L, 2L, 3L, 6L, 4L, 5L), .Label = c("bak", 
    "bak1", "bak3", "cos", "gig", "rty"), class = "factor")), .Names = c("prod", 
"class"), class = "data.frame", row.names = c(NA, -6L))

, поэтому

workingdataset<-(
prod
den sg
kro serdgt
ris szdg
muka aszgt
chlo sdgt
prokl zfdsgr
den zdasfh)


workingdataset=structure(list(prod = structure(c(2L, 4L, 7L, 5L, 1L, 6L, 3L), .Label = c("chlo sdgt", 
"den sg", "den zdasfh)", "kro serdgt", "muka aszgt", "prokl zfdsgr", 
"ris szdg"), class = "factor")), .Names = "prod", class = "data.frame", row.names = c(NA, 
-7L))

Я использую templatedata для получения атрибута в наборе рабочих данных.

как вывод workingdataset выглядит как

prod           clas
den   sg        bak
kro  serdgt      bak1
ris szdg        bak3
muka aszgt      rty
chlo sdgt       cos
prokl   zfdsgr  gig
den  vv         bak

как это сделать

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете достичь этого, используя замечательный пакет fuzzyjoin , созданный Дэвидом Робинсоном.Это позволяет объединять две таблицы, используя нечеткую логику, включая строковые расстояния или регулярные выражения.Здесь мы будем использовать регулярные выражения.

library(fuzzyjoin)
library(magrittr)

workingdataset=structure(list(prod = structure(c(2L, 4L, 7L, 5L, 1L, 6L, 3L), 
                                               .Label = c("chlo sdgt", 
                                                          "den sg", 
                                                          "den zdasfh)", 
                                                          "kro serdgt", 
                                                          "muka aszgt", 
                                                          "prokl zfdsgr", 
                                                          "ris szdg"), 
                                               class = "factor")), 
                         .Names = "prod", 
                         class = "data.frame", 
                         row.names = c(NA, -7L))

templatedata=structure(list(prod = structure(c(2L, 3L, 6L, 4L, 1L, 5L), 
                                             .Label = c("chlo", 
                                                        "den", 
                                                        "kro", 
                                                        "muka", 
                                                        "prokl", 
                                                        "ris"), 
                                             class = "factor"), 
                            class = structure(c(1L, 2L, 3L, 6L, 4L, 5L), 
                                              .Label = c("bak", "bak1", "bak3", 
                                                         "cos", "gig", "rty"), 
                                              class = "factor")), 
                       .Names = c("prod", "class"), 
                       class = "data.frame", 
                       row.names = c(NA, -6L))

workingdataset %>%
    regex_inner_join(templatedata, by='prod')

        prod.x prod.y class
1       den sg    den   bak
2   kro serdgt    kro  bak1
3     ris szdg    ris  bak3
4   muka aszgt   muka   rty
5    chlo sdgt   chlo   cos
6 prokl zfdsgr  prokl   gig
7  den zdasfh)    den   bak
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...