R 按行比较几个数据帧上的项目组

R 按行比较几个数据帧上的项目组,r,R,我有两个数据帧,我想比较一下。让我们从显示两个数据示例开始: 数据1: > dput(data1) structure(list(cluster = c(1, 1, 2, 3, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 9, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15), description = c("BTB", "BTB", "CVA", "BAS", "TRK", "EXT

我有两个数据帧,我想比较一下。让我们从显示两个数据示例开始:

数据1:

> dput(data1)
structure(list(cluster = c(1, 1, 2, 3, 3, 4, 5, 6, 6, 6, 6, 6, 
6, 6, 7, 8, 9, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 
14, 15, 15), description = c("BTB", "BTB", "CVA", "BAS", "TRK", 
"EXT", "LRA", "CAW", "CAW", "CAW", "CAW", "CAW", "TTE", "TTE", 
"MYU", "MTQ", "PLI", "KQA", "STG", "STG", "ATF", "ATF", "REW", 
"REW", "REW", "KIR", "KIR", "ROR", "ROR", "FRQ", "QEQ", "QEQ"
)), .Names = c("cluster", "description"), row.names = c("Mazda RX4", 
"Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive", "Hornet Sportabout", 
"Valiant", "Duster 360", "Merc 240D", "Merc 230", "Merc 280", 
"Merc 280C", "Merc 450SE", "Merc 450SL", "Merc 450SLC", "Cadillac Fleetwood", 
"Lincoln Continental", "Chrysler Imperial", "Fiat 128", "Honda Civic", 
"Toyota Corolla", "Toyota Corona", "Dodge Challenger", "AMC Javelin", 
"Lotus Europa", "Ford Pantera L", "Ferrari Dino", "Maserati Bora", 
"Volvo 142E", "Volvo 144", "Chrysler", "Ford 131", "Ford 144"
), class = "data.frame")
数据2:

    > dput(data2)
structure(list(cluster = c(3, 4, 5, 5, 5, 6, 6, 3, 3, 6, 7, 8, 
9, 10, 11, 11, 11, 11, 12, 12, 12, 13, 14, 13, 11, 14, 15, 15, 
1, 1, 2, 2), description = c("TRK", "EXT", "LRA", "CAW", "CAW", 
"CAW", "CAW", "CAW", "TTE", "TTE", "MYU", "MTQ", "PLI", "KQA", 
"STG", "STG", "ATF", "ATF", "REW", "REW", "REW", "KIR", "KIR", 
"ROR", "ROR", "FRQ", "QEQ", "QEQ", "BTB", "BTB", "CVA", "BAS"
)), .Names = c("cluster", "description"), row.names = c("Hornet Sportabout", 
"Valiant", "Duster 360", "Merc 240D", "Merc 230", "Merc 280", 
"Merc 280C", "Merc 450SE", "Merc 450SL", "Merc 450SLC", "Cadillac Fleetwood", 
"Lincoln Continental", "Chrysler Imperial", "Fiat 128", "Honda Civic", 
"Toyota Corolla", "Toyota Corona", "Dodge Challenger", "AMC Javelin", 
"Lotus Europa", "Ford Pantera L", "Ferrari Dino", "Maserati Bora", 
"Volvo 142E", "Volvo 144", "Chrysler", "Ford 131", "Ford 144", 
"Mazda RX4", "Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive"), class = "data.frame")
因此,在这两个数据集中,我们可以找到相同的行名称和描述,但顺序不同。 我想对同一组中的汽车进行比较。因此,让我们以
“Merc 240D”
为例:

它与(
data
)一起属于
cluster==6

现在让我们转到第二个
data2
。这次
“Merc 240D”
与以下各项一起属于集群5:

Duster 360                5         LRA
Merc 240D                 5         CAW
Merc 230                  5         CAW
这一次,同一个集群中只有三辆车,但在两个数据集中,只有一辆车与
“Merc 240D”
一起被找到,即
“Merc 230”

我想对数据集中的每一行(汽车)进行这样的分析。与世卫组织一起分析它所属的集群,并与其他数据集进行比较

问题是,我有大约20个数据集可以这样比较。我相信循环是必要的

作为输出,我希望有这样的表(仅举个例子):


这样做可能吗?提前感谢您的帮助

如果只想返回每个表的示例输出表。您可以使用
聚合
合并
。在下文中,如何对模型名称执行此操作,您可以对其他信息进行调整:

    # first make a column aggregating all the partners for each cluster
    pasteAlphabetical <- function(vectNames){
        return(paste(sort(vectNames),collapse=","))
    }
    byCluster <-aggregate(row.names(data1),by=list(cluster=data1$cluster),pasteAlphabetical)

    # then you can attribute this to each row
    data1 <- merge(data1,byCluster,by="cluster")
这将为您提供始终在同一集群中关联的模型列表


我不确定您到底想做什么,但这应该给您提供要遵循的原则,包括针对大量数据集的原则

你想知道在你的20个数据集中处于同一集群中的合作伙伴的数量和名称吗?开始时,我可以使用较少的数据集。所有的表都有所有的车型吗?
               nr_partners  name of partners       Description Descr_partners 
Merc 240D         3         Merc1, Merc2, Merc3       CAW       CAW, TTE, TTE
    # first make a column aggregating all the partners for each cluster
    pasteAlphabetical <- function(vectNames){
        return(paste(sort(vectNames),collapse=","))
    }
    byCluster <-aggregate(row.names(data1),by=list(cluster=data1$cluster),pasteAlphabetical)

    # then you can attribute this to each row
    data1 <- merge(data1,byCluster,by="cluster")
    # get the clusters in each table for each car
    SummarizeClusters <- function(datas){
        for(id in 1:length(datas)) datas[[id]]$names <- row.names(datas[[id]])
        summaryDat <- datas[[1]][,c("cluster","description"),drop=FALSE]
        summaryDat$names <- row.names(datas[[1]])

        for(iData in 2:length(datas)){
            summaryDat <- merge(summaryDat,datas[[iData]],by="names",all=TRUE)
        }

        return(summaryDat)
    }
    datas <- list(data1,data2)
    sumDat <- SummarizeClusters(datas)

    clusterCols <- names(sumDat)[grep("cluster",names(sumDat))] # get cluster column names

    # and then aggregate models that have clusters in common
    alwaysSameClusters<-aggregate(sumDat$names,
            by=sumDat[,clusterCols],pasteAlphabetical)