2016-03-30 14 views
0

My Datenrahmen wie folgt aussieht (aber ist 285 x 12300) mit einigen verstreuten Na:Filling Werte von Paaren innerhalb von Datenrahmen

 X5f65665a X8c267f9f X169df433 X5742e722 X148d530d X88febf48 
F185 X5f65665a   0 X169df433   0 X148d530d X88febf48 
F186 X5f65665a   0 X169df433   0 X148d530d   0 
M187 X5f65665a X8c267f9f X169df433   0 X148d530d X88febf48 
F188 0   X8c267f9f X169df433   0 X148d530d   0 
M189 X5f65665a X8c267f9f X169df433   0 X148d530d X88febf48 
F190 X5f65665a   0 X169df433   0 X148d530d X88febf48 

Nach rownames links, sind die Spalten paarweise (cols 1 & 2; 3 & 4 usw.). Ich muss jede "0" durch den Partnerwert aus diesem Paar ersetzen. Also sollte (1,2) X5f65665a werden und (4,1) sollte X8c267f9f werden.

Antwort

1
d1 <- read.table(text=" 
    X5f65665a X8c267f9f X169df433 X5742e722 X148d530d X88febf48 
F185 X5f65665a   0 X169df433   0 X148d530d X88febf48 
F186 X5f65665a   0 X169df433   0 X148d530d   0 
M187 X5f65665a X8c267f9f X169df433   0 X148d530d X88febf48 
F188 0   X8c267f9f X169df433   0 X148d530d   0 
M189 X5f65665a X8c267f9f X169df433   0 X148d530d X88febf48 
F190 X5f65665a   0 X169df433   0 X148d530d X88febf48", 
       head=T, as.is=T, row.names=1) 

d1.lst <- lapply(seq(1, ncol(d1), by=2), function(x){return(d1[, x:(x+1)])}) 
d1.lst.fil <- lapply(d1.lst, function(x){ 
    x[,1][x[,1]==0] <- x[,2][x[,1]==0] 
    x[,2][x[,2]==0] <- x[,1][x[,2]==0] 
    return(x) 
}) 

d2 <- do.call(cbind, d1.lst.fil) 
#  X5f65665a X8c267f9f X169df433 X5742e722 X148d530d X88febf48 
# F185 X5f65665a X5f65665a X169df433 X169df433 X148d530d X88febf48 
# F186 X5f65665a X5f65665a X169df433 X169df433 X148d530d X148d530d 
# M187 X5f65665a X8c267f9f X169df433 X169df433 X148d530d X88febf48 
# F188 X8c267f9f X8c267f9f X169df433 X169df433 X148d530d X148d530d 
# M189 X5f65665a X8c267f9f X169df433 X169df433 X148d530d X88febf48 
# F190 X5f65665a X5f65665a X169df433 X169df433 X148d530d X88febf48 

UPDATE (to dnatheist):

Die isssue wird durch "NA" verursacht. Probieren Sie die folgenden Skripts aus. Es wird "NA" unverändert lassen.

d1.lst.fil <- lapply(d1.lst, function(x){ 
    x[,1][!is.na(x[,1]) & x[,1]=="0"] <- x[,2][!is.na(x[,1]) & x[,1]=="0"] 
    x[,2][!is.na(x[,2]) & x[,2]=="0"] <- x[,1][!is.na(x[,2]) & x[,2]=="0"] 
    return(x) 
}) 
+0

Es ist toll, auf der ersten 10x10 aber mit ganzem Datenrahmen ich: Fehler in x [1] [x [1] == 0] <- x [2] [x [1] == 0]: NAs sind in subskribierten Zuweisungen nicht erlaubt – dnatheist

+0

Bitte ein reproduzierbares Beispiel zeigen. Ich habe nur einige Vorschläge: (1) stelle sicher, dass alle deine Spalten Zeichen oder ganze Zahlen sind; (2) x [, 1] [x [, 1] == "0"] <- x [, 2] [x [, 1] == "0"] und x [, 2] [x [, 2 ] == "0"] <- x [1] [x [2] == "0"] –

+0

‚d1 <- read.table (text =“ X5f65665a X8c267f9f X169df433 X5742e722 X148d530d X88febf48 F185 X5f65665a 0 X169df433 0 X148d530d X88febf48 F186 X5f65665a 0 X169df433 0 X148d530d 0 M187 X5f65665a X8c267f9f X169df433 0 X148d530d X88febf48 F188 0 X8c267f9f NA NA X148d530d 0 M189 X5f65665a X8c267f9f X169df433 0 X148d530d X88febf48 F190 X5f65665a 0 X169df433 0 X148d530d X88febf48" head = T, as.is = T, row.names = 1) ' – dnatheist

Verwandte Themen