如何将多个变量数据合并为一个变量数据?

How to combine multiple variable data to a single variable data?

制作数据框并选择要查看的变量后,我面临两难选择。作为我的数据源的 excel sheet 被不同的人使用记录相同类型的数据。

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)现在已拆分为 undergroups。我如何将 undergroups 组合成一个组合组,例如。 red+Red+RedWine -> 总酒。我对这种数据集使用 phyloseq 包

我只想创建一个新的 data.frame,最容易用 dplyr 做,但也可以用 base 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...)

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 中,并用合适的长度

定义

可以使用 dplyr:starts_withdplyr::select 来组合列。 ignore.casedplyr:starts_with 中默认为 TRUE,在 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)