在制作数据框并选择我想要查看的变量之后,我面临两难选择。作为我的数据源的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包用于这种数据集
答案 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_with
和dplyr::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)