2015-12-21 6 views
5
set.seed(123) 
B = matrix( c(5, 3, 3, 1, 5, 1,3,1,NA,NA), nrow=5, ncol=2) 
m1<-matrix(nrow=5,ncol=2,data=runif(10)) 
m2<-matrix(nrow=5,ncol=2,data=runif(10)) 
m2[1,2]=NA; ml <- list(m1, m2) 
ind <- sapply(unique(c(B)), function(x) which(B == x, arr.ind = TRUE)) 
re <- lapply(ind, function(x) lapply(ml, function(y) y[x])) 
res=lapply(re, function(x) c(t(do.call(cbind, x)))) 

लेकिन मुझे नहीं पता कि कौन सा मेल खाता है। उदाहरण के लिए: res[[1]]5, 3, or 1 in B का प्रतिनिधित्व करता है? बी से इसकी पत्राचार कक्षा (संख्या) के t में आउटपुट कॉलम का नाम देने का कोई तरीका है?लापरवाही में NA को अनदेखा कैसे करें?

+0

आप शब्दों को आप क्या करने के लिए कोशिश कर रहे हैं क्या में व्याख्या कर सकते हैं कर सकते हैं? इस इनपुट के आधार पर आपका आदर्श अपेक्षित आउटपुट कैसा दिखता है? – Heroka

+0

मेरा घुटने-झटके का जवाब na.rm = TRUE का उपयोग करना होगा ... लेकिन मैं आपके लक्ष्य के बारे में _exactly_ निश्चित नहीं हूं। – user1945827

+0

यदि आप एनए मान – akrun

उत्तर

5

हम का उपयोग complete.cases

lapply(re, function(x) { 
     v1 <- c(t(do.call(cbind, x))) 
     v1[complete.cases(v1)]}) 
+1

@bicton का उपयोग कर सकते हैं यदि आपने 'अद्वितीय (सी (बी)) [1] 5 3 1 NA' का उपयोग किया है, तो यह आमतौर पर उसी क्रम में चलता है अवलोकन पाए जाते हैं। इसलिए, इस मामले में, '5'' res [[1]] ',' 3' 'res [[2]] 'के रूप में होगा और इसी तरह .... – akrun

+1

@bicton आप सेट कर सकते हैं फिर 'res' के नाम 'res <- setNames (res, unique (c (बी)) के रूप में नाम' – akrun

+1

@bicton आप नाम सेट करने के बाद 'res' के नामों के माध्यम से लूप कर सकते हैं, यानी 'lapply (names (res) , फ़ंक्शन (एनएम) write.table (res [[nm]], paste0 ('myfile', nm, '.txt'))) '(क्षमा करें, पहले संदेश नहीं देखा था) – akrun

संबंधित मुद्दे