【问题标题】:Add category column to a data set将类别列添加到数据集
【发布时间】:2019-07-14 09:55:20
【问题描述】:

我有一个这样的数据表

+------------+-------+
|  Model     | Price | 
+------------+-------+
|  Apple-1   |   10  |
+------------+-------+
|  New Apple |   11  |
+------------+-------+
|  Orange    |   13  |
+------------+-------+
|  Orange2019|   15  |
+------------+-------+
|  Cat       |   19  |
+------------+-------+

我想定义一个基本模型标签列表,我想添加到与特定条件/值匹配的任何单行中。因此,例如定义一个数据框用于标记这样的

+------------+--------+
|  Model     |   Tag  | 
+------------+------ -+
|  Apple-1   |   A    |
+------------+------ -+
|  New Apple |   A    |
+------------+------ -+
|  Orange    |   B    |
+------------+------ -+
|  Cat       |   B    |
+------------+--------+

我想找到一些方法来得到这个结果:

+------------+-------+--------+
|  Model     | Price |  Tag   |
+------------+-------+--------+
|  Apple-1   |   10  |   A    |
+------------+-------+--------|
|  New Apple |   11  |   A    |
+------------+-------+--------|
|  Orange    |   13  |   B    |
+------------+-------+--------|
|  Orange2019|   15  |   B    |
+------------+-------+--------|
|  Cat       |   19  |   B    |
+------------+-------+--------|

我不介意使用表格来管理标记数据,而且我知道我可以编写非常“临时”的 mutate 语句来达到我想要的结果,只是想知道是否有更优雅的方式根据模式匹配标记字符串。

【问题讨论】:

    标签: r tagging


    【解决方案1】:

    一个想法是使用 Levenshtein 距离来聚类您拥有的单词。您需要提供许多集群。一旦你有了这个集群,只需将每个集群的数量作为类别标签添加到你的表中。查看此答案,该答案详细介绍了 Levenshtein 距离聚类。 Text clustering with Levenshtein distances

    编辑

    我想我完全误解了你的问题...试试这个

    df=data.frame("Model"=c("Apple-1","New Apple","Organe","Orange2019","Cat"),
                  "Price"=c(10,11,13,15,19),stringsAsFactors = FALSE)
    tags=data.frame("Model"=c("Apple-1","New Apple","Orange","Cat"),
                    "Tag"=c("A","A","B","B"),stringsAsFactors = FALSE)
    
    
    df%>%rowwise()%>%mutate(Tag=if_else(!is.na(tags$Tag[which(!is.na(str_extract(Model,tags$Model)))[1]]),
                                        tags$Tag[which(!is.na(str_extract(Model,tags$Model)))[1]],false="None"))
    
      Model      Price Tag  
      <chr>      <dbl> <chr>
    1 Apple-1       10 A    
    2 New Apple     11 A    
    3 Organe        13 None 
    4 Orange2019    15 B    
    5 Cat           19 B 
    

    我实际上将Orange 更改为Organe,以便您看到如果不匹配会发生什么(返回none

    【讨论】:

    • 真的非常感谢工作非常好,即使我不完全理解里面的魔力是什么:-)。但是我已经弄清楚背后的基本思想是什么,这只是一个非常缓慢的过程,因为在我的数据集中,总计算时间超过 5 分钟 :-)
    猜你喜欢
    • 2015-02-13
    • 2010-09-15
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多