如何将多个可变数据组合到单个变量数据中?

时间:2018-05-22 17:09:20

标签: r phyloseq

在制作数据框并选择我想要查看的变量之后,我面临两难选择。作为我的数据源的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)现在已被分为不足群体。如何将底层组合成一个组合组,例如。红色+红色+红色葡萄酒 - >总酒量。我将phyloseq包用于这种数据集

3 个答案:

答案 0 :(得分: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中,并使用长度

定义

答案 1 :(得分:0)

我只想创建一个新的data.frame,最容易用dplyr做,但也适用于基础R:

使用dplyr

newFrame <- oldFrame %>% mutate(Mock = Mock, Neg = Neg + Neg1PCR + Neg2PCR + NegPBS, Red = red + Red + RedWine, Water = water + Water, White = white = White)

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

newFrame <- data.frame(Red = oldFrame$Red + oldFrame$red + oldFrame$RedWine...)

答案 2 :(得分:0)

可以使用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)