Как объединить несколько переменных данных в одну переменную данных? - PullRequest
0 голосов
/ 22 мая 2018

После создания моего фрейма данных и выбора переменных, на которые я хочу посмотреть, у меня возникает дилемма.Лист 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 голосов
/ 22 мая 2018
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, определенном с хорошими длинами

0 голосов
/ 22 мая 2018

Можно использовать dplyr:starts_with и dplyr::select для объединения столбцов.ignore.case по умолчанию TRUE в dplyr:starts_with с помощью в ОП data.frame опубликовал.

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)
0 голосов
/ 22 мая 2018

Я бы просто создал новый 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...)

...