如何重组我的数据框以运行Krippendorff的Alpha?

时间:2019-01-19 01:30:07

标签: r dataframe

我需要重组我的数据框,以便运行Krippendorff的Alpha。我可以找到什么功能/基本解决方案?

这是我的数据框的样子:

enter image description here

也就是说,每个参与者有7行(用于7个观察)。每个观察结果均由两个不同的人评估。我希望数据框具有三列:代码,Transcriber1,Transcriber2。在“ Transcriber1”下将显示第一个转录器的错误评分,无论其名称是什么,在“ Transcriber2”下显示第二个评分器的错误评分。也就是说,我希望它看起来像这样:

enter image description here

有什么想法吗?任何帮助将不胜感激!

感谢社区!

1 个答案:

答案 0 :(得分:0)

1)dplyr / tidyr 假设输入DF如最后的注释中所示,请创建一个Transcriber列,其值分别为Transcriber1和{{1} }和带有序列号的Transcriber2列,最后使用Seq转换为宽格式。

spread

给予:

library(dplyr)
library(tidyr)

DF %>%
  group_by(Code) %>%
  mutate(Transcriber = as.numeric(factor(Transcriber, levels = unique(Transcriber)))) %>%
  group_by(Transcriber = paste0("Transcriber", Transcriber), add = TRUE) %>%
  mutate(Seq = seq_along(Errors)) %>%
  ungroup %>%
  spread(Transcriber, Errors) %>%
  select(-Seq)

2)基本R 仅使用基本R的解决方案将是:

# A tibble: 14 x 3
    Code Transcriber1 Transcriber2
   <dbl>        <int>        <int>
 1  1011            1            8
 2  1011            2            9
 3  1011            3           10
 4  1011            4           11
 5  1011            5           12
 6  1011            6           13
 7  1011            7           14
 8  2011           15           22
 9  2011           16           23
10  2011           17           24
11  2011           18           25
12  2011           19           26
13  2011           20           27
14  2011           21           28

注意

可重复输入的形式假定为:

make_factor <- function(x) factor(x, levels = unique(x))
DF2 <- transform(DF, 
  Transcriber = paste0("Transcriber", ave(as.numeric(Transcriber), Code, FUN = make_factor)),
  Seq = ave(Errors, Code, Transcriber, FUN = seq_along))
r <- reshape(DF2, dir = "wide", idvar = c("Seq", "Code"), timevar = "Transcriber")[-2]
names(r) <- sub("Errors.", "", names(r))