如何将数据框拆分为多个表并将其放入e列表?

时间:2015-08-31 14:26:45

标签: r

我有一个数据框,其中包含来自两个评估者的数据,以测试4种不同测试的可靠性:

test1_rater1<-c(1,4,3,2,3,4,1,2,2,3)
test2_rater1<-c(1,3,3,3,2,3,1,1,2,1)
test3_rater1<-c(1,4,3,4,4,2,3,1,3,4)
test4_rater1<-c(1,3,4,2,3,2,1,2,3,2)
test1_rater2<-c(1,3,3,4,3,4,3,2,1,3)
test2_rater2<-c(1,3,1,3,1,3,3,1,1,1)
test3_rater2<-c(1,3,3,2,4,2,3,4,3,4)
test4_rater2<-c(2,3,4,4,3,2,3,2,3,2)
mydata<-data.frame(test1_rater1,test2_rater1,test3_rater1,test4_rater1,test1_rater2,test2_rater2,test3_rater2,test4_rater2)

# For the kappa statistic, I used:

cohen.kappa(cbind(test1_rater1,test1_rater2))
cohen.kappa(cbind(test2_rater1,test2_rater2))
cohen.kappa(cbind(test3_rater1,test3_rater2))
cohen.kappa(cbind(test4_rater1,test4_rater2))

在我的数据框中是来自80多个不同测试的数据,这个解决方案很安静...我想了解一个列表然后使用lapply函数,但我没有工作。有更短的方法吗?

谢谢,Nat

1 个答案:

答案 0 :(得分:3)

第一步是tidy您的数据:不是每对测试和评估者都有一列,而是有// in objectA class's function GameObject objB = Instantiate(objectB, gameObject.transform.position, Quaternion.identity); objB.parentPos = transform.position; // and if you just want to know who Instantiated it, use this line: objB.parentGameObj = gameObject; // in objectB class public Vector3 parentPos; public GameObject parentGameObj; 列,然后是test和{{ 1}}。您可以使用dplyr和tidyr软件包进行重组:

rater1

现在您可以在每个测试中执行Cohen-kappa计算。这将需要一个函数将rater2对象转换为数据框。你可以使用这个功能:

library(dplyr)
library(tidyr)
rearranged_data <- mydata %>%
  mutate(row = row_number()) %>%
  gather(column, value, -row) %>%
  separate(column, c("test", "rater")) %>%
  spread(rater, value)

head(rearranged_data)
#>   row  test rater1 rater2
#> 1   1 test1      1      1
#> 2   1 test2      1      1
#> 3   1 test3      1      1
#> 4   1 test4      1      2
#> 5   2 test1      4      3
#> 6   2 test2      3      3

如果您使用kappa安装我的broom package的最新版本,则可以使用library(broom) tidy_kappa <- function(x) { broom::fix_data_frame(x$confid, newcol = "type") } 方法,因为我刚刚将这样的方法添加到包中。

现在,您可以使用dplyr&#39; devtools::install_github("dgrtwo/broom")tidy执行cohen.kappa测试:

group_by

无论你有多少次测试,这种方法都会有效,每次测试会产生两行(一行有未加权的kappa,另一行有加权:就像do函数的输出一样)。请注意,此输出格式对于绘图或进一步分析结果非常有用:

library(psych)
results <- rearranged_data %>%
  group_by(test) %>%
  do(tidy_kappa(cohen.kappa(cbind(.$rater1, .$rater2))))
results
#> Source: local data frame [8 x 5]
#> Groups: test
#> 
#>    test             type       lower  estimate     upper
#> 1 test1 unweighted kappa  0.08574000 0.4594595 0.8331789
#> 2 test1   weighted kappa  0.07284356 0.5238095 0.9747755
#> 3 test2 unweighted kappa -0.10654813 0.3333333 0.7732148
#> 4 test2   weighted kappa -0.09877879 0.4444444 0.9876677
#> 5 test3 unweighted kappa  0.19876127 0.5833333 0.9679054
#> 6 test3   weighted kappa -0.39241493 0.3577982 1.1080113
#> 7 test4 unweighted kappa  0.21116862 0.5714286 0.9316885
#> 8 test4   weighted kappa -0.02324226 0.4444444 0.9121311

enter image description here