3

也许是一个经常被问到的问题,我被皇室困在这里。

从 XML 文件中,我试图搜索所有出现、它们的行以及每个仅包含字母和数字(字面意思是字母数字)的 12 个字符串的出现总数。

例如:如果我的文件是xmlInput,我正在尝试搜索并提取 12 个字符的 alpha-num 字符串的所有出现、位置和总数。

示例输出:

  String        Total Count     Line-Num
 CPXY180D2324   2               132,846
 CPXY180D2131   1               372
 CPCY180D2139   1               133       

我知道,我可以用来regmatches按模式获取所有出现的字符串。我一直在使用以下内容:(感谢您对此的帮助)。

ProNum12<-regmatches(xmlInput, regexpr("([A-Z0-9]{12})", xmlInput))
ProNum12

regmatches给我所有遵循模式的匹配项。但它没有给我模式出现的行号。grep给我所有出现的行号。

我以为我可以使用textcnt库包,Tau但无法正常运行。也许它不是正确的包?

R中是否有一个包/库将搜索与模式匹配的所有单词并返回每次出现的出现总数和行数?如果不存在这样的包装,知道如何使用上述任何一种或更好的方法来做到这一点吗?

4

1 回答 1

4

在没有看到您的数据的情况下,很难就如何进行提供建议。这是一个包含一些普通字符串的示例,可以帮助您开始寻找自己的解决方案。

首先,一些示例数据(可能看起来不像您的数据):

x <- c("Some text with a strange CPXY180D2324 string stuck in it.", 
       "Some more text with CPXY180D2131 strange strings CPCY180D2139 stuck in it.", 
       "Even more text with strings that CPXY180D2131 don't make much sense.", 
       "I'm CPXY180D2324 tired CPXY180D2324 of CPXY180D2324 text with CPXY180D2131 strange strings CPCY180D2139 stuck in it.")

我们可以用空格分割它。这是另一个可能不适合您的实际问题的领域,但同样,这只是为了帮助您入门(或帮助其他人提供更好的答案,可能是这种情况。)

x2 <- strsplit(x, " ")

在拆分数据中搜索与您的正则表达式模式匹配的值。创建一个data.frame包含行号和匹配字符串的。

temp <- do.call(rbind, lapply(seq_along(x2), function(y) { 
  data.frame(line = y,
             value = grep("([A-Z0-9]{12})", x2[[y]], 
                          value = TRUE))
}))
temp
#   line        value
# 1    1 CPXY180D2324
# 2    2 CPXY180D2131
# 3    2 CPCY180D2139
# 4    3 CPXY180D2131
# 5    4 CPXY180D2324
# 6    4 CPXY180D2324
# 7    4 CPXY180D2324
# 8    4 CPXY180D2131
# 9    4 CPCY180D2139

创建您data.frame的行号和计数。

with(temp, data.frame(
  lines = tapply(line, value, paste, collapse = ", "),
  count = tapply(line, value, length)))
#                   lines count
# CPXY180D2324 1, 4, 4, 4     4
# CPCY180D2139       2, 4     2
# CPXY180D2131    2, 3, 4     3

无论如何,这纯粹是一个猜测(我在消磨时间......)

于 2013-07-17T12:52:30.750 回答