2014-01-16 1 views
1

Я работаю с большой матрицей, M, которая содержит образец по данным гена. Некоторые элементы содержат несколько сцепленных записей, но векторы были преобразованы в символы:Элементы матрицы R, преобразованные в символы - как спасти уникальные значения?

 geneA gene2    
sample1 NA NA     
sample2 "c(\"siteX\", \"siteY\")" "0" 
sample3 "siteZ" "0" 

Так что, когда я называю уникальным (M [ «geneA»]) Я получаю:

NA "c(\"siteX\", \"siteY\")" "siteZ" 

Есть ли способ «де-характеризовать» матрицу, чтобы я мог получить все уникальные значения для geneA при запуске моего кода? Или было бы лучше сосредоточиться вместо этого на извлечении и манипулировании элементами, представляющими интерес, с использованием регулярных выражений?

Заранее благодарен!

редактировать:

> dput(tmp) 
structure(c(NA, "c(\"siteX\", \"siteY\")", 
"siteZ", NA, "0", "0"), .Dim = c(3L, 2L), .Dimnames = list(
c("sample1", "sample2", "sample3"), c("geneA", 
"gene2"))) 
+2

является нет способа вернуться к исходному источнику и лучше читать данные ...? То есть, вы определенно застряли в операции по спасению ...? –

+0

Я не знаю исходного источника, поэтому, к сожалению, это действительно операция спасения:/ – user2232814

+0

, пожалуйста, опубликуйте вывод 'dput (some_sample_data)' в своем сообщении, чтобы люди могли легко просмотреть ваши данные проблемы. –

ответ

1

Если вы просто хотите уникальные geneA значения:

df = structure(c(NA, "c(\"siteX\", \"siteY\")", "siteZ", NA, "0", "0"), .Dim = c(3L, 2L), 
       .Dimnames = list(c("sample1", "sample2", "sample3"), c("geneA", "gene2"))) 
df = data.frame(df,stringsAsFactors=F) 
df$geneA = as.character(df$geneA) 
geneA = unlist(sapply(df$geneA, 
         function(x) 
         { sapply(strsplit(x,",")[[1]], 
           function(x) { sub(".*\"(\\w+)\".*", "\\1", x,perl=TRUE) }  ) })) 
names(geneA) = NULL 
unique(geneA) 

Nicer упорядоченность и очистки в кадр данных с удалением NA geneA'S:

df = structure(c(NA, "c(\"siteX\", \"siteY\")", "siteZ", NA, "g1", "g2"), .Dim = c(3L, 2L), 
       .Dimnames = list(c("sample1", "sample2", "sample3"), c("geneA", "gene2"))) 
df = data.frame(df,stringsAsFactors=F) 
df$geneA = as.character(df$geneA) 
require(plyr) 
ddply(df, "geneA", function(x) 
    { 
     if(!is.na(x)) 
     { 
     geneAs = sapply(strsplit(x$geneA,",")[[1]], function(y) { sub(".*\"(\\w+)\".*", "\\1", y,perl=TRUE) }); 
     return(data.frame("geneA"= geneAs, "gene2" = rep(x$gene2[1],length(geneAs)))) 
     } else return(NULL) 
    }) 
+0

Это прекрасно работает, спасибо! – user2232814

 Смежные вопросы

  • Нет связанных вопросов^_^