R:计算嵌套列表中的项目

时间:2014-02-17 12:39:43

标签: r list count statistics

如何有效地计算嵌套列表中的项目?例如,我有一个标题名称列表,例如:

header.names <- list(list("Post Unique Reference", "Name", "Grade (or equivalent)", "Job Title", "Date", "Date"), 
     list("Name", "Organisation", "Unit", "Reporting Senior Post", "Grade", "Date"))

我想计算标头出现次数的统计数据。

一种简单的方法可能是

require(stringr)
sum(str_count(unlist(header.names), "Date"))

然而:

  • 计算“名称”应该产生2。
  • 计算“日期”也应该产生2,因为每个列表只计算一次。
  • 计算“等级”应该产生1 - 非精确搜索会如何产生2?

1 个答案:

答案 0 :(得分:1)

扩展Zbynek的观点:

由于应忽略列表中每个元素内的重复项,因此需要使用唯一值循环遍历列表。

unique_headers <- lapply(header.names, unique)

要一次处理所有内容,最简单的方法是将列表展平,这样您就可以使用矢量化解决方案。由于您不关心元素的名称,因此可以通过传递use.names = FALSE来获得适度的性能提升。

flat_headers <- unlist(unique_headers, use.names = FALSE)

最后,您要计算列表中的元素。根据最适合您的输出格式,您可以从table选择countplyr

table(flat_headers)

library(plyr)
count(flat_headers)

非精确匹配是一门艺术:你需要考虑一下你的数据是什么以及允许匹配的模糊程度,以便得到你想要的答案。

例如,是否将括号内的所有内容都剥离好用于您的用例? 标题名称的例子是否只有大小写不同?
是否有拼写错误的标题名称?