首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >模糊比较和聚合单个列数据帧中的相似记录

模糊比较和聚合单个列数据帧中的相似记录
EN

Stack Overflow用户
提问于 2018-12-13 04:59:42
回答 1查看 63关注 0票数 0

当前的需求是聚合单个列,并提供每行的计数。我遇到了一些需要帮助的问题:

  1. 由于参数或其他信息(如错误代码),许多行相似但不完全相同。
  2. 正在处理的数据不可预测,因此聚合需要具有一定程度的灵活性才能匹配。
  3. 无法知道差异发生的位置或字符串的模式。
  4. 无法预先知道使某些行不同的消息或值。

因此,我希望做到以下几点:

TextData
Message : @p_id is not valid
Message : @p_id is not valid
Message : @p_id is not valid
Message : @p_id is not valid
Message : ID record does not exist: @p_Id=11933
Message : ID record does not exist: @p_Id=21944
Message : ID record does not exist: @p_Id=31933
Message : ID record does not exist: @p_Id=41931
Message : ID record does not exist: @p_Id=51993
The duplicate key value is (129).
The duplicate key value is (129).
The duplicate key value is (135).

匹配并计算成类似如下的内容:

Count    TextData                                    Values
4        Message : @p_id is not valid               
5        Message : ID record does not exist: @p_Id=  11933,21944,31933,41931,51993
3        The duplicate key value is ().              129,135

如果这是不可能的,那么至少

Count    TextData
4        Message : @p_id is not valid
5        Message : ID record does not exist: @p_Id=
3        The duplicate key value is ().

我已经寻找了几个小时,试图找到这样的解决方案,但没有找到一个适用于我的情况的示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-13 05:22:14

data.table解决方案

library( data.table )
library( stringr )
#read data
dt <- fread(
  "Message : @p_id is not valid
   Message : @p_id is not valid
  Message : @p_id is not valid
  Message : @p_id is not valid
  Message : ID record does not exist: @p_Id=11933
  Message : ID record does not exist: @p_Id=21944
  Message : ID record does not exist: @p_Id=31933
  Message : ID record does not exist: @p_Id=41931
  Message : ID record does not exist: @p_Id=51993
  The duplicate key value is (129).
  The duplicate key value is (129).
  The duplicate key value is (135).", header = FALSE, sep = "")

#see if a string with numbers is present in the text, if so: extract
dt[, `:=`( id = stringr::str_extract( V1, "\\d+" ),
           V1 = ifelse( grepl ( "\\d+", V1 ), gsub( "\\d+", "", V1 ), V1 ) ) ]

#summarise    
dt[, list( Count = .N, values = toString( unique( id ) ) ), by = V1][]

#                                            V1 Count                            values
# 1:               Message : @p_id is not valid     4                                NA
# 2: Message : ID record does not exist: @p_Id=     5 11933, 21944, 31933, 41931, 51993
# 3:             The duplicate key value is ().     3                          129, 135
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53751259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档