也许是一个经常被问到的问题,我被困在这里。
从XML文件中,我正在尝试搜索所有出现次数,它们的行以及每个包含字母和数字的12个字符串的总出现次数(字面意思是字母数字)。
例如:如果我的文件是xmlInput
,我正在尝试搜索并提取12个字符的字母数字字符串的所有出现次数,位置和总计数。
示例输出:
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
的{{1}}包,但无法让它正常运行。也许它不是正确的包装?
R中是否有一个包/库,它会搜索与该模式匹配的所有单词,并返回每次出现的外观和亚麻布的总数?如果不存在这样的pacakge,任何想法如何使用上述任何一个或更好的方法来做到这一点?
答案 0 :(得分: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
无论如何,这纯粹是猜测(我消磨时间......)