【发布时间】:2015-06-17 15:58:51
【问题描述】:
我正在创建一个数据集,以使用正则表达式计算不同单词组合的聚合值。每行都有一个唯一的正则表达式值,我想检查另一个数据集并找到它出现在其中的次数。
第一个数据集 (df1) 如下所示:
word1 word2 pattern
air 10 (^|\\s)air(\\s.*)?\\s10($|\\s)
airport 20 (^|\\s)airport(\\s.*)?\\s20($|\\s)
car 30 (^|\\s)car(\\s.*)?\\s30($|\\s)
我想从中匹配的另一个数据集(df2)看起来像
sl_no query
1 air 10
2 airport 20
3 airport 20
3 airport 20
3 car 30
我想要的最终输出应该是这样的 word1 word2 total_occ 空气 10 1 机场 20 3 汽车 30 1
我可以通过在 R 中使用 apply 来做到这一点
process <-
function(x)
{
length(grep(x[["pattern"]], df2$query))
}
df1$total_occ=apply(df1,1,process)
但由于我的数据集非常大,因此需要花费一些时间。
我发现“parallel”包的“mclapply”功能可用于在多核上运行此类东西,为此我尝试先运行 lapply。它给了我错误说
lapply(df,process)
x[, "pattern"] 中的错误:维数不正确
请让我知道我应该进行哪些更改才能正确运行 lapply。
【问题讨论】:
-
您正在迭代模式,所以这应该是您向
lapply发送的第一个参数,对吧? -
这就是你得到这个错误的原因:
lapply将依次对列表的每个元素应用一些函数;所以该函数必须能够对列表的元素进行操作。数据框上下文中的元素是它的列,因此您要求 R 将process应用于df的每一列。