2013-11-04 23 views
1

鑑於以下數據:式給出:R一欄,發現該列的副本中data.frame

questionTagMatrix <- data.frame(question1=c("0","1","0"), question2=c("1","0", "0"), question3=c("0","1","0"), question4=c("0","1","1") ) 
rownames(questionTagMatrix)[1] <- "php" 
rownames(questionTagMatrix)[2] <- "html" 
rownames(questionTagMatrix)[3] <- "javascript" 

newQuestion <- data.frame(newquestion=c("0","1","0")) 
rownames(newQuestion)[1] <- "php" 
rownames(newQuestion)[2] <- "html" 
rownames(newQuestion)[3] <- "javascript" 

如何找到等於newQuestionquestionTagMatrix所有列?

回答

2

您可以使用apply找到列:

questionTagMatrix[apply(questionTagMatrix, 2, function(x) 
               all(x == as.matrix(newQuestion)))] 

questionTagMatrix所有列與newQuestion比較。其結果是:

#   question1 question3 
# php    0   0 
# html    1   1 
# javascript   0   0 
0

使用colSums矢量化的解決方案:

questionTagMatrix[,colSums(questionTagMatrix == newQuestion) 
        ==nrow(questionTagMatrix)] 

      question1 question3 
php    0   0 
html    1   1 
javascript   0   0 

PS newQuestion是一個向量在這裏:

newQuestion =c("0","1","0") ## not data.frame(newquestion=c("0","1","0")) 

要獲得唯一的問題名稱:

names(questionTagMatrix)[colSums(questionTagMatrix == newQuestion) 
+     ==nrow(questionTagMatrix)] 
[1] "question1" "question3" 
+0

我得到一個錯誤:「錯誤Ops.data.frame( questionTagMatrix,newQuestion)等「 – tucson

+0

@tucson查看我的編輯。不需要將newQuestion放入data.frame中,將其保存爲vector。 – agstudy