比较 R 中的数据集

Posted

技术标签:

【中文标题】比较 R 中的数据集【英文标题】:Compare datasets in R 【发布时间】:2012-02-10 22:35:06 【问题描述】:

我已在 CSV 文件中收集了一组交易,格式为:

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,

我确信这很简单,但很想阅读一些建议/答案来帮助我。

【问题讨论】:

【参考方案1】:

另一个答案引用%in%,但在这种情况下intersect 更方便(您可能也想查看match——但我认为它与%in% 记录在同一位置)——使用lapplyintersect,我们可以将答案变成一条线:

数据:

> 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 方法的输出也包含在一个带有列表的文件中。再次感谢【参考方案2】:

一种方法如下(但是,由于我将结构保留为矩阵,因此我留下了已删除数据的 NA(如果导出回 CSV,这些可能会被删除);我也确信可以在没有循环的情况下进行 - 这会使其更快(但是,恕我直言,可读性较差),而且我相信还有一种更有效的方法来执行逻辑 - 我也有兴趣看到其他人对此的看法)

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 函数 - 这些函数相当简单,并且会减少代码【参考方案3】:

%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

【讨论】:

非常感谢大家,听起来很有趣的方法,准备试试。

以上是关于比较 R 中的数据集的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用data函数获取当前R环境可用的示例数据集:获取datasets包中的所有示例数据集获取所有包的数据集获取特定包的数据集

R中的svm,训练数据集[关闭]

使用 R 中 ggplot2 的 facet_wrap 功能对多个数据集进行箱线图比较?

R语言之创建数据集

如何获取 R 中的内置数据集列表?

R语言使用caret包中的createResample函数进行机器学习数据集采样数据集有放回的采样(bootstrapping)