【发布时间】:2014-01-29 05:53:13
【问题描述】:
我的数据如下:
>df2
id calmonth product
1 101 01 apple
2 102 01 apple&nokia&htc
3 103 01 htc
4 104 01 apple&htc
5 104 02 nokia
para=c('apple','htc','nokia')
我想获取产品中包含apple&htc,apple&nokia 等的 id 数量。
我做了一个函数如下:
xandy=function(a,b){ ddply(df2,.(calmonth),summarise, csum=length(grep(paste0('apple','.*','htc'),product)), coproduct=paste0('apple','&','htc') ) }
这个函数给我一个完美的结果如下:
> xandy(para[1],para[3])
calmonth csum coproduct
1 01 2 apple&htc
2 02 0 apple&htc
但我需要的不仅仅是apple&htc,而是apple&nokiaetc,所以我将apple and htcthemself 更改为参数,新的可能函数如下:
xandy=function(a,b){ ddply(df2,.(calmonth),summarise, csum=length(grep(paste0(a,'.*',b),product)), coproduct=paste0(a,'&',b) ) }
看到差异了吗? 我已将 'apple' ,'htc' 更改为 a,b(parameters) 但这根本不是我想要的。
> xandy(para[1],para[3])
eval(expr, envir, enclos) 中的错误:缺少参数,没有默认值另外:警告消息: 在 grep(paste0(a, ".*", b), product) : 参数 'pattern' 的长度 > 1,并且只使用第一个元素
【问题讨论】:
-
顺便说一句:我不确定这是否是您获取数据的方式,但是在单个产品列中将 apple&htc 等串联起来是个坏主意。最好只创建具有相同 ID 的另一行,然后所有这些聚合和操作要容易得多。
标签: regex r parameter-passing plyr