比较R中
数据集,我已经收集了一组交易的格式的CSV文件:比较R中
{Pierre, lait, oeuf, beurre, pain}
{Paul, mange du pain,jambon, lait}
{Jacques, oeuf, va chez la crémière, pain, voiture}
我打算做一个简单的关联规则分析,但首先我想排除从每个交易项目,其不属于ReferenceSet = {lait, oeuf, beurre, pain}
。
因此我得到的数据集将是,在我的例子:
{Pierre, lait, oeuf, beurre, pain}
{Paul,lait}
{Jacques, oeuf, pain,}
我敢肯定,这是很简单,但很愿意阅读的建议/答案,帮助我一下。
%in%
运营商将派上用场。
pierre <- c("lait","oeuf","beurre","pain")
paul <- c("mange du pain", "jambon", "lait")
jacques <- c("oeuf","va chez la crémière", "pain", "voiture")
reference <- c("lait", "oeuf", "beurre", "pain")
pierre_fixed <- pierre[pierre %in% reference]
paul_fixed <- paul[paul %in% reference]
jacques_fixed <- jacques[jacques %in% reference]
pierre_fixed
paul_fixed
jacques_fixed
一种方法是如下(但是,因为我离开了结构作为基质我已经离开那里的数据已被删除(如果出口回CSV这些可以被删除NAS);我也是肯定可以做到没有循环 - 这会让它更快(但是,恕我直言,不太可读),我相信还有一种更有效的方式来执行逻辑 - 我也有兴趣看到别人的观点这一点)
ref <- c("lait","oeuf","beurre","pain")
input <- read.csv("info.csv",sep=",",header=FALSE,strip.white=TRUE)
> input
V1 V2 V3 V4 V5
1 Pierre lait oeuf beurre pain
2 Paul mange du pain jambon lait
3 Jacques oeuf va chez la crémière pain voiture
input <- as.matrix(input)
output <- matrix(nrow=nrow(input),ncol=ncol(input))
currentRow <- c()
for(i in 1:nrow(input)) {
j <- 2
output[i,1]<-input[i,1]
for(k in 2:length(input[i,])) {
if(toString(input[i,k]) %in% ref){
output[i,j] <- toString(input[i,k])
j<-j+1
}
}
}
> output
[,1] [,2] [,3] [,4] [,5]
[1,] "Pierre" "lait" "oeuf" "beurre" "pain"
[2,] "Paul" "lait" NA NA NA
[3,] "Jacques" "oeuf" "pain" NA NA
在我傍晚的星期天疲惫中,我忘记了'* apply'函数 - 这些都相当直接,并且会将代码截断 – ChrisW 2012-01-16 11:47:06
另一个答案引用%in%
,但在这种情况下intersect
甚至更加得心应手(你可能想看看match
,太 - b UT我认为这是在同一个地方记录为%in%
) - 与lapply
和intersect
我们可以把答案变成一个班轮:
数据:
> L <- list(pierre=c("lait","oeuf","beurre","pain") ,
+ paul=c("mange du pain", "jambon", "lait"),
+ jacques=c("oeuf","va chez la crémière", "pain", "voiture"))
> reference <- c("lait", "oeuf", "beurre", "pain")
答:
> lapply(L,intersect,reference)
$pierre
[1] "lait" "oeuf" "beurre" "pain"
$paul
[1] "lait"
$jacques
[1] "oeuf" "pain"
非常感谢Ben,这种方法听起来很好直接。现在我会尝试了解如何实现它以便从csv文件构建输入列表,并将lapply方法的输出写入带有列表的文件中。再次感谢 – 2012-01-16 11:09:34
非常感谢你们所有人,听起来有趣的方法,去尝试它们。 – 2012-01-15 22:08:25