如何将多个变量数据合并为一个变量数据?
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_with
和 dplyr::select
来组合列。 ignore.case
在 dplyr: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)
制作数据框并选择要查看的变量后,我面临两难选择。作为我的数据源的 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_with
和 dplyr::select
来组合列。 ignore.case
在 dplyr: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)