【问题标题】:How to combine multiple variable data to a single variable data?如何将多个变量数据组合成一个变量数据?
【发布时间】:2018-05-22 17:09:20
【问题描述】:

在制作了我的数据框并选择了我想要查看的变量之后,我面临着两难境地。充当我的数据源的 Excel 表被不同的人使用,记录相同类型的数据。

Mock     Neg Neg1PCR Neg2PCR  NegPBS     red     Red RedWine   water   Water   white   White 
  1       9       1       1       1       2      18       4       4       4       2      26 

如您所见,由于数据的写入方式不同,主要组(Redwine、Whitewine 和 Water)现在已拆分为下组。我如何将下组组合成一个组合组,例如。 red+Red+RedWine -> 总酒量。我对这种数据集使用 phyloseq 包

【问题讨论】:

    标签: r phyloseq


    【解决方案1】:
    names <- c("red","white","water")
    df2 <- setNames(data.frame(matrix(ncol = length(names), nrow = nrow(df))),names)
    
    for(col in names){
      df2[,col] <- rowSums(df[,grep(col,tolower(names(df)))])
    }
    

    这里

    grep(col,tolower(names(df)))
    

    查找在向量名称中包含“red”等字符串的所有列名称。然后,您只需将它们加到一个新的 data.frame df2 中,并定义好长度

    【讨论】:

      【解决方案2】:

      我只想创建一个新的 data.frame,使用 dplyr 最简单,但也可以使用基础 R:

      使用 dplyr

      newFrame &lt;- oldFrame %&gt;% mutate(Mock = Mock, Neg = Neg + Neg1PCR + Neg2PCR + NegPBS, Red = red + Red + RedWine, Water = water + Water, White = white = White)

      使用基础 R(不完整,但你明白了)

      newFrame &lt;- data.frame(Red = oldFrame$Red + oldFrame$red + oldFrame$RedWine...)

      【讨论】:

        【解决方案3】:

        可以使用dplyr:starts_withdplyr::select 组合列。 ignore.case 默认为TRUE 中的dplyr:starts_with,在data.frame OP 发布的帮助下。

        library(dplyr)
        names <- c("red", "white", "water")
        cbind(df[1], t(mapply(function(x)rowSums(select(df, starts_with(x))), names)))
        
        #   Mock red white water
        # 1    1  24    28     8
        

        数据:

        df <- read.table(text = 
        "Mock   Neg Neg1PCR Neg2PCR  NegPBS     red   Red  RedWine   water   Water   white   White 
        1       9       1       1       1       2      18       4       4       4       2      26",
        header = TRUE, stringsAsFactors = FALSE)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-03
          • 1970-01-01
          • 2019-09-02
          • 2021-02-03
          • 1970-01-01
          • 1970-01-01
          • 2018-10-23
          • 1970-01-01
          相关资源
          最近更新 更多