首页 文章

在R中,将不同数据帧的相同摘要列合并为一个新数据帧

提问于
浏览
-1

我有大约40个数据帧(df1,df2,df3等)具有相同的结构,每个数据帧有25列 . 我可以运行摘要(df1),摘要(df2)等 . 摘要包括几个列,我对摘要的这一列感兴趣:

对于df1,它是

stage 
stage1  :2222 
stage2  :1212 
stage3  :8898

对于df2,它是

stage 
stage1  :2334 
stage2  :9887 
stage3  :2344

对于df3,它是

stage 
stage1  :5334 
stage2  :4887 
stage3  :344

等等

我想创建一个新的df:

df1      df2      df3      ...
stage1     2222     2334     5334     ... 
stage2     1212     9887     4887     ...
stage3     8898     2344     344      ...

谢谢!

2 回答

  • 0

    您的数据框中的列 stage 似乎是3个级别的因子: stage1stage2stage3 . 我无法确定,因为您没有提供可重复的示例,但如果是这种情况:

    假设您有数据帧

    df <- data.frame(stage = as.factor(c('stage1', 'stage2', 'stage1', 'stage3', 'stage2', 'stage2')))
    df2 <- data.frame(stage = as.factor(c('stage3', 'stage2', 'stage3', 'stage3', 'stage2', 'stage1')))
    

    您可以使用 summary() 询问出现的数量

    summary(df$stage)
    #stage1 stage2 stage3 
    #     2      3      1
    

    使用 rbind() 组合结果,您就可以在一个数据帧中出现阶段 .

    dfstages <- as.data.frame(rbind(summary(df$stage), summary(df2$stage)))
    #  stage1 stage2 stage3
    #1      2      3      1
    #2      1      2      3
    
  • 0

    通过向每个帧添加数据帧名称并使用 table() 可以避免必须通过 summary() 处理数据帧中的所有变量,只是为了获得一列的频率计数 . 这是使用包含数据框名称的 table() 的另一种方法

    生成样本数据后,我们将数据帧分配给列表以添加数据帧名称的列,然后使用 table() 计算频率 . 通过在表中包含数据框名称作为第二维,我们获得了所需的输出:具有 stage 变量值的行,具有数据框名称的列 .

    # 
    # create example data
    
    df1 <-data.frame(stage =c(rep("stage1",2222),
                             rep("stage2",1212),
                             rep("stage3",8898)))
    
    df2 <-data.frame(stage =c(rep("stage1",2334),
                              rep("stage2",9887),
                              rep("stage3",2344)))
    
    
    df3 <-data.frame(stage =c(rep("stage1",5334),
                              rep("stage2",4887),
                              rep("stage3",344)))
    
    theList <- list(df1=df1,df2=df2,df3=df3)
    
    # add data frame name as column in each data frame
    
    for(i in 1:length(theList)) {
         theList[[i]]$dfname <- names(theList[i])
    }
    
    # rbind to one data frame before generating frequencies 
    theData <- do.call(rbind,theList)
    
    table(theData$stage , theData$dfname)
    

    ......和输出:

    > table(theData$stage , theData$dfname)
    
              df1  df2  df3
      stage1 2222 2334 5334
      stage2 1212 9887 4887
      stage3 8898 2344  344
    >
    

相关问题