【问题标题】:using ifelse statement but from dataset in R使用 ifelse 语句,但来自 R 中的数据集
【发布时间】:2018-10-15 19:27:33
【问题描述】:

要创建属性,我可以这样做

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 语句写起来时间长,而且代码也很长。 我可以从数据框中使用它吗?

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))

我使用模板数据来获取工作数据集中的属性。

作为输出 workingdataset 看起来像

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

怎么做

【问题讨论】:

  • stackoverflow.com/questions/1299871/… 这不适合我的任务(我使用短语)
  • @MrFlick,我编辑了帖子,我能做的就是做 dput。现在工作数据集包含带有关键词的短语。我必须通过这个关键字从模板数据创建属性
  • @MrFlick,我提供了输出

标签: r if-statement dplyr grepl


【解决方案1】:

您可以使用 David Robinson 创建的出色的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多