2016-03-29 26 views
-1

Bir paket ('ilgili'), geniş kapsamlı bir SNP veri çerçevesindeki (385x12300) değişkenlere sahip bazı değerleri değiştirmemi gerektirir. Bu hiç şüphesiz basit ama bu soruyu hiçbir yerde bulamıyorum. Örnek veriler:Değişken Adlarıyla Bazı Değişken Değerleri Değiştirin

binfrom<-c(1,1,1,1,0,NA) 
x <- sample(binfrom, 100, replace = TRUE) 
x<-data.frame(matrix(x,10,10)) 

O değişken sütundaki her "1" yerine, X2, vb değişken isimleri X1 gerekir. "0" ve "NA" değerleri değişmeden kalır.

+1

"NA" karakterinin yerine "NA" kullanmanız mı istediniz? – akrun

+0

Evet, oyuncak verileri oluştururken özür dilerim. – dnatheist

cevap

5

Biz factor den character sınıfa 'x' sütun dönüştürmek ve karşılık gelen sütun adı ile her sütundaki için kullanılır.

x[] <- lapply(x, as.character) 
x[] <- Map(function(y,z) replace(y, y==1, z), x, colnames(x)) 
OP'ın gönderide

, NA karakteri "NA" olarak oluşturuldu. Bu nedenle, data.frame (stringsAsFactors=TRUE - varsayılan seçenek ile) oluşturulurken sütunlar factor idi. Eğer gerçek NA kullansaydık, ilk adım yani character'a dönüştürmek gerekli değildir.


durumda, data.table çalışmak, başka bir seçenek büyük veri kümelerinde çalışırken hızlı olmalıdır set olduğunu.

library(data.table) 
setDT(x) 
for(j in seq_along(x)){ 
    set(x, i=NULL, j= j, value= as.character(x[[j]])) 
    set(x, i= which(x[[j]]==1 & !is.na(x[[j]])), 
     j=j, value= names(x)[j]) 
} 

NOT: Varsayım gerçek NA değerlerle çalışıyoruz olmasıdır.

+0

Mükemmel çalışıyor, teşekkürler. Ama şimdi, rownames'in karışık bir çanta olduğu gerçek verilerimde (örneğin: 12,13, 14, A6, A7) sadece bir harfle başlayan satırları Haritalar. Birkaç şey denedim ama şans yok. – dnatheist

+0

Teşekkür ederiz @akrun. Kaçak boşluk benim gerçek veri problemimdi. – dnatheist

+0

İsim yerine sütun numarası eklemek için değiştirme işlevini nasıl değiştirebilirim? Yoksa bu ayrı bir soru mu olmalı? – dnatheist

6

bir başka yolu

indx <- which(x == 1, arr.ind = TRUE) 
x[indx] <- names(x)[indx[, 2]] 

Bu temelde olanlar konumlarını tanımlayan ve karşılık gelen sütun adlarıyla ederken ile değiştiriyor (siz @akruns yorumu görmek orada-gerçek NA s var ben varsayarak) which kullanmaktır oluşturulan dizinin sütun konumunu kullanarak.