我需要重组我的数据框,以便运行Krippendorff的Alpha。我可以找到什么功能/基本解决方案?
这是我的数据框的样子:
也就是说,每个参与者有7行(用于7个观察)。每个观察结果均由两个不同的人评估。我希望数据框具有三列:代码,Transcriber1,Transcriber2。在“ Transcriber1”下将显示第一个转录器的错误评分,无论其名称是什么,在“ Transcriber2”下显示第二个评分器的错误评分。也就是说,我希望它看起来像这样:
有什么想法吗?任何帮助将不胜感激!
感谢社区!
答案 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))