0

在制作了我的数据框并选择了我想要查看的变量之后,我面临着两难境地。充当我的数据源的 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)现在已拆分为 undergroups。我如何将下组组合成一个组合组,例如。red+Red+RedWine -> 总酒量。我对这种数据集使用 phyloseq 包

4

3 回答 3

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定义好长度

于 2018-05-22T18:33:02.183 回答
0

我只想创建一个新的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...)

于 2018-05-22T18:30:27.350 回答
0

可以使用dplyr:starts_withdplyr::select组合列。ignore.case默认情况下TRUE,在dplyr:starts_withdata.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)
于 2018-05-22T18:45:39.497 回答