R Cohen kappa的合并数据帧
我试图用R分析一些数据,但我还不太熟悉R,所以我完全被卡住了 我试图做的是处理我的输入数据,这样我就可以用它来计算科恩的Kappa。 现在的问题是,对于rater_1,我对一些项目有几个评分,我需要选择一个。如果评分员_1给出的项目评分与评分员_2相同,则应选择此评分,如果不能使用列表中的任何评分 我试过了R Cohen kappa的合并数据帧,r,merge,dataframe,R,Merge,Dataframe,我试图用R分析一些数据,但我还不太熟悉R,所以我完全被卡住了 我试图做的是处理我的输入数据,这样我就可以用它来计算科恩的Kappa。 现在的问题是,对于rater_1,我对一些项目有几个评分,我需要选择一个。如果评分员_1给出的项目评分与评分员_2相同,则应选择此评分,如果不能使用列表中的任何评分 我试过了 unique(merge(rater_1, rater_2, all.x=TRUE)) 这让我很接近,但是如果两个评分员之间的评分有分歧,那么只保留一个 所以,我的问题是,我如何从 ite
unique(merge(rater_1, rater_2, all.x=TRUE))
这让我很接近,但是如果两个评分员之间的评分有分歧,那么只保留一个
所以,我的问题是,我如何从
item rating_1
1 3
2 5
3 4
item rating_2
1 2
1 3
2 4
2 1
2 2
3 4
3 2
到
有一些奇特的方法可以做到这一点,但我认为结合一些基本技术来完成这项任务可能会有所帮助。通常,在您的问题中,您应该包括一些生成数据的简单方法,如下所示:
# Create some sample data
set.seed(1)
id<-rep(1:50)
rater_1<-sample(1:5,50,replace=TRUE)
df1<-data.frame(id,rater_1)
id<-rep(1:50,each=2)
rater_2<-sample(1:5,100,replace=TRUE)
df2<-data.frame(id,rater_2)
same.or.random<-function(x) {
matched<-which.min(x$rater_1==x$rater_2)
if(length(matched)>0) x[matched,]
else x[sample(1:nrow(x),1),]
}
do.call(rbind,by(merge(df1,df2),id,same.or.random))
现在,这里有一个简单的技巧
# Merge together the data frames.
all.merged<-merge(df1,df2)
# id rater_1 rater_2
# 1 1 2 3
# 2 1 2 5
# 3 2 2 3
# 4 2 2 2
# 5 3 3 1
# 6 3 3 1
# Find the ones that are equal.
same.rating<-all.merged[all.merged$rater_2==all.merged$rater_1,]
# Consider id 44, sometimes they match twice.
# So remove duplicates.
same.rating<-same.rating[!duplicated(same.rating),]
# Find the ones that never matched.
not.same.rating<-all.merged[!(all.merged$id %in% same.rating$id),]
# Pick one. I chose to pick the maximum.
picked.rating<-aggregate(rater_2~id+rater_1,not.same.rating,max)
# Stick the two together.
result<-rbind(same.rating,picked.rating)
result<-result[order(result$id),] # Sort
# id rater_1 rater_2
# 27 1 2 5
# 4 2 2 2
# 33 3 3 1
# 44 4 5 3
# 281 5 2 4
# 11 6 5 5
这样做的一种奇特方式是:
# Create some sample data
set.seed(1)
id<-rep(1:50)
rater_1<-sample(1:5,50,replace=TRUE)
df1<-data.frame(id,rater_1)
id<-rep(1:50,each=2)
rater_2<-sample(1:5,100,replace=TRUE)
df2<-data.frame(id,rater_2)
same.or.random<-function(x) {
matched<-which.min(x$rater_1==x$rater_2)
if(length(matched)>0) x[matched,]
else x[sample(1:nrow(x),1),]
}
do.call(rbind,by(merge(df1,df2),id,same.or.random))
如果你喜欢,你可以勾选箭头接受答案。谢谢你提供了两种方法。现在,我将尝试理解第一个版本…:我不理解的是带有聚合函数的行。rater_2~id+rater_1是什么意思?我试图查找,但找不到答案。请总体上看示例,特别是公式下的示例。。。。本质上,这意味着,对于not.same.rating中id和rater_1的每个组合,找到rater_2的最大值。谢谢!