2017-04-10 151 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