2017-04-10 146 views
0

在數據幀的專欄中,我想就問題展開:Find the index of the column in data frame that contains the string as value查找具有價值

我有數據

data<-data.frame(expert=c("class.1","class.4","class.2"), 
    choice1=c("class.3","class.8","class.10"), 
    score1=c(0.92,0.91,0.30), 
    choice2=c("class.1","class.7","class.9"), 
    score2=c(0.70,0.78,0.30), 
    choice3=c("class.6","class.1","class.2"), 
    score3=c(0.01,0.58,0.30), 
    stringsAsFactors=FALSE 
) 

我想獲得與專家的選擇有關的分數。目標是找出1)選擇是否正確,但是我需要檢查是否有專家選擇的代碼與分數相關。

在例子中的數據,使用dplyr:

data %>% mutate(Right=expert==choice1) 

得到答案的一部分,但不處理的關係。 Find the index of the column in data frame that contains the string as value的答案使用grepl,我不認爲它可以處理正則表達式模式的向量。

我已經嘗試了max,max.col,以及哪個,哪一個,以及與rowwise()的組合,但我不能得到正確的答案。我還用整形數據「整齊」(謝謝加州大學洛杉磯分校IDRE http://stats.idre.ucla.edu/r/faq/how-can-i-reshape-my-data-in-r/),但我無法適當地過濾數據。

tidydata <- reshape(data,varying =list(paste0("choice",1:3), 
    paste0("score",1:3)),direction="long",v.names=c("choice","score")) %>% 
    arrange(id) %>% filter(expert==choice) 

我知道專家選擇的列,但輸給choice.1

的最佳解決方案的連接必須返回一個因素的函數(右,領帶,錯),其中排3將返回平局。

編輯: 該數據比較分類器的結果和人類註釋器。分類器有時可以得出相同的結果(2個或更多類的分數相同)。我試圖確定何時分類器是正確的(choice1 == expert),但不是綁定的(我稱之爲RIGHT);綁定(當專家和分類器選擇的分類具有相同的分數,但不是我稱之爲TIE的相同代碼時);否則分類是錯誤的。 謝謝

+0

我有點不明白'第3行會返回領帶'的意思。 – Mons2us

+0

您能製作樣品結果嗎? – akash87

回答

0

那麼,我只能想到使用ifelse語句;

data %>% mutate(TF1 = choice1 == expert, 
      TF2 = choice2 == expert, 
      TF3 = choice3 == expert, 
      TFs1 = score2 == score1, 
      TFs2 = score3 == score1, 
      Decision = ifelse(TF1==TRUE, "Right", 
          ifelse(TF2 == TRUE & TFs1 == TRUE | TF3==TRUE & TFs2 == TRUE, "Tie", "Wrong"))) 

這可能不是你所尋找的那個,但會按照你的解釋工作。

+0

對不起,如果我不清楚。對於第一行,專家選擇了class.1,我的第一選擇(選擇1)是class.3,所以我錯了。在第二行,專家選擇了class.4,我的第一選擇是class.8,所以我錯了。第三行,專家選擇了class.2,choice.1,choice 2和choice.3。所以答案是沒有錯的,它是捆綁的。正確答案應該是(假,假,並列) – user7845541

+0

第一行怎麼樣?你有class.1作爲你的第二選擇,但爲什麼它是錯誤的?不應該也是配合? – Mons2us

+0

第二選擇的分數不等於第一選擇的分數, – user7845541