2015-06-16 95 views
0

我想要製作一個數組,其中彙總了包含在所述行中的唯一值的數據幀的行。R構造列的值的彙總

與樣品下面的示例代碼:

ref <- c(1:8) 

data1 <- c("A","","C","","","","A","") 
data2 <- c("A","","","A","C","","","") 
data3 <- c("","B","","","","","","B") 
data4 <- c("A","B","","","","D","A","") 

initial.data <- data.frame(ref, data1, data2, data3, data4) 

我能得到什麼,我想:

summary.data <- paste(initial.data[,2], initial.data[,3], 
        initial.data[,4], initial.data[,5], sep='') 

desired.data <- substring(summary.data,1,1) 

不過,我想也不至於編碼本的更簡潔的方式和一個假設每行只能取一個值。

+2

嘗試'V1 < - 排序(獨特的(C(initial.data [ - 1] ))); v1 [v1!='']' – akrun

+0

@akrun再次感謝,這給了我行中的唯一值,但是在我的更復雜的數據中丟失了與行的總結相關性。我編輯了示例代碼以提供更好的示例。 – mattbawn

+0

在示例數據的情況下,每行可以保存一個唯一值。與該行關聯的列可以具有該值,也可以不具有該值。我試圖爲所有包含許多空單元格的行檢索這些唯一值的數組。 – mattbawn

回答

0

您可以嘗試

apply(initial.data[-1],1, function(x) unique(x[x!=''])) 
#[1] "A" "B" "C" "A" "C" "D" "A" "B" 

或者

substr(do.call(paste0, initial.data[-1]),1,1) 
#[1] "A" "B" "C" "A" "C" "D" "A" "B" 

或者使用max.col

initial.data[cbind(1:nrow(initial.data),max.col(initial.data[-1]!='')+1)] 
#[1] "A" "B" "C" "A" "C" "D" "A" "B" 
+1

謝謝,對不起,我的解釋一開始就不夠清楚。 – mattbawn

+1

@mattbawn沒問題。很高興知道它的工作。起初,這是造成混亂的例子。 – akrun