2016-03-30 61 views
0

我的數據幀看起來像這樣(但是285 X 12300)配有一些散射NA:填充值從對數據幀

 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 

後左rownames,列是在雙(COLS 1 & 2; 3 & 4等)。我需要用該對中的夥伴值替換任何「0」。所以(1,2)應該變成X5f65665a,(4,1)變成X8c267f9f。

回答

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(到dnatheist):

的isssue由 「NA」 引起的。嘗試以下腳本。它會使「NA」保持不變。

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

它是在第一10×10很大,但與整個數據幀我得到:錯誤在X [1] [X [1] == 0] < - X [2] [X [1] == 0]: 下標指定中不允許使用NAA – dnatheist

+0

請顯示可重複的示例。我只有一些建議:(1)確保你所有的列是字符或整數; (2)x [,1] [x [,1] ==「0」] < - x [,2] [x [,1] ==「0」]和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" , 頭= T, as.is = T,row.names = 1)' – dnatheist