2015-07-27 2 views
0

Я пытаюсь объединить фрейм данных и вектор, а не точные совпадения строк в столбце, но с помощью подстановочных строк. Для того, чтобы уточнить, что у вас есть этот dataframe:Рамка данных подстановочных знаков

v <-data.frame(X1=c("AGTACAGT","AGTGAAGT","TGTA","GTTA","GAT","GAT"),X2=c(1,1,1,1,1,1)) 
#   X1 X2 
# 1 AGTACAGT 1 
# 2 AGTGAAGT 2 
# 3  TGTA 3 
# 4  GTTA 4 
# 5  GAT 5 
# 6  GAT 6 

Я хочу создать dataframe, создавая различные цвета для каждого AGT.{3}GT, .{T|G}TA, GAT шаблон и создать новый столбец X3, что бы показать, что цвет. Так что-то вроде этого:

#   X1 X2  X3 
# 1 AGTACAGT 1 "#FE7F01" 
# 2 AGTGAAGT 2 "#FE7F01" 
# 3  TGTA 3 "#FE7F00" 
# 4  GTTA 4 "#FE7F00" 
# 5  GAT 5 "#FE8002" 
# 6  GAT 6 "#FE8002" 

До сих пор я использую это, чтобы создать цвета для каждого уровня, но я не знаю, как посчитать, сколько «уровни шаблонных», в отличие от особых уровней есть:

x <- nlevels(v$X1) 
x.colors2 <- colorRampPalette(brewer.pal(8,"Paired"))(x) 
G <- data.frame("X1"=levels(v$X1),"X3"=x.colors2) 
v <- merge(v,G) 

ответ

1

Вот решение.

найти шаблоны:

pat <- c("^AGT.{3}GT$", "^.(T|G)TA$", "^GAT$") 
n <- length(pat) 
indList <- lapply(pat, grep, v$X1) 

Генерировать цвета:

library(RColorBrewer) 
col <- colorRampPalette(brewer.pal(8, "Paired"))(n) 

Добавить цвета в кадр данных:

colFull <- rep(col, sapply(indList, length)) 
v$color <- colFull[order(unlist(indList))] 

Результат:

v 
#   X1 X2 color 
# 1 AGTACAGT 1 #A6CEE3 
# 2 AGTGAAGT 1 #A6CEE3 
# 3  TGTA 1 #979C62 
# 4  GTTA 1 #979C62 
# 5  GAT 1 #FF7F00 
# 6  GAT 1 #FF7F00 
Смежные вопросы