重组数据(用于 IRR 分析)
Restructuring data (for IRR-analysis)
我有以下数据框 df
(虚构数据),其中包含多个变量 var1
、var2
、...、var_n
:
var1<-c("A","A","A","B","A","C","C","A", "A", "E", "E", "B")
var2<-c(NA,"1","1","5","6","2","3","1", "1", "3", "3", "2")
id<-c(1,2,2,3,3,4,4,5,5,6,6,7)
df<-data.frame(id, var1, var2)
df
id var1 var2
1 A <NA>
2 A 1
2 A 1
3 B 5
3 A 6
4 C 2
4 C 3
5 A 1
5 A 1
6 E 3
6 E 3
7 B 2
数据是从文件分析中检索到的,其中几个编码员从物理文件中提取了值。每个文件都有一个特定的 id
。因此,如果有两个条目具有相同的 id
,这意味着两个不同的编码员对同一份文档进行了编码。例如在文件号。 4 两位编码员都同意 var1 的值为 C,而在文档中没有。 3 有异议(A vs. B)。
为了计算评分者间的可靠性 (irr),我需要按如下方式重组数据框:
id var1 var1_coder2 var2 var2_coder2
2 A A 1 5
3 B A 5 6
4 C C 2 3
5 C C 1 1
6 E E 3 3
谁能告诉我如何完成这项工作?谢谢!
您可以使用 dplyr
(group_by
、mutate
)和 tidyr
(gather
、spread
、 unite
):
library(tidyr)
library(dplyr)
new_df <- df %>%
group_by(id) %>%
mutate(coder = paste0("coder_", 1:n())) %>%
gather("variables", "values", -id, -coder) %>%
unite(column, coder, variables) %>%
spread(column, values)
new_df
# A tibble: 7 x 5
# Groups: id [7]
# id coder_1_var1 coder_1_var2 coder_2_var1 coder_2_var2
# <dbl> <chr> <chr> <chr> <chr>
# 1 1 A NA NA NA
# 2 2 A 1 A 1
# 3 3 B 5 A 6
# 4 4 C 2 C 3
# 5 5 A 1 A 1
# 6 6 E 3 E 3
# 7 7 B 2 NA NA
如果您只想保留所有编码员都输入值的行,您可以使用 filter_all
。
new_df %>%
filter_all(all_vars(!is.na(.)))
# A tibble: 5 x 5
# Groups: id [5]
# id coder_1_var1 coder_1_var2 coder_2_var1 coder_2_var2
# <dbl> <chr> <chr> <chr> <chr>
# 1 2 A 1 A 1
# 2 3 B 5 A 6
# 3 4 C 2 C 3
# 4 5 A 1 A 1
# 5 6 E 3 E 3
我有以下数据框 df
(虚构数据),其中包含多个变量 var1
、var2
、...、var_n
:
var1<-c("A","A","A","B","A","C","C","A", "A", "E", "E", "B")
var2<-c(NA,"1","1","5","6","2","3","1", "1", "3", "3", "2")
id<-c(1,2,2,3,3,4,4,5,5,6,6,7)
df<-data.frame(id, var1, var2)
df
id var1 var2
1 A <NA>
2 A 1
2 A 1
3 B 5
3 A 6
4 C 2
4 C 3
5 A 1
5 A 1
6 E 3
6 E 3
7 B 2
数据是从文件分析中检索到的,其中几个编码员从物理文件中提取了值。每个文件都有一个特定的 id
。因此,如果有两个条目具有相同的 id
,这意味着两个不同的编码员对同一份文档进行了编码。例如在文件号。 4 两位编码员都同意 var1 的值为 C,而在文档中没有。 3 有异议(A vs. B)。
为了计算评分者间的可靠性 (irr),我需要按如下方式重组数据框:
id var1 var1_coder2 var2 var2_coder2
2 A A 1 5
3 B A 5 6
4 C C 2 3
5 C C 1 1
6 E E 3 3
谁能告诉我如何完成这项工作?谢谢!
您可以使用 dplyr
(group_by
、mutate
)和 tidyr
(gather
、spread
、 unite
):
library(tidyr)
library(dplyr)
new_df <- df %>%
group_by(id) %>%
mutate(coder = paste0("coder_", 1:n())) %>%
gather("variables", "values", -id, -coder) %>%
unite(column, coder, variables) %>%
spread(column, values)
new_df
# A tibble: 7 x 5
# Groups: id [7]
# id coder_1_var1 coder_1_var2 coder_2_var1 coder_2_var2
# <dbl> <chr> <chr> <chr> <chr>
# 1 1 A NA NA NA
# 2 2 A 1 A 1
# 3 3 B 5 A 6
# 4 4 C 2 C 3
# 5 5 A 1 A 1
# 6 6 E 3 E 3
# 7 7 B 2 NA NA
如果您只想保留所有编码员都输入值的行,您可以使用 filter_all
。
new_df %>%
filter_all(all_vars(!is.na(.)))
# A tibble: 5 x 5
# Groups: id [5]
# id coder_1_var1 coder_1_var2 coder_2_var1 coder_2_var2
# <dbl> <chr> <chr> <chr> <chr>
# 1 2 A 1 A 1
# 2 3 B 5 A 6
# 3 4 C 2 C 3
# 4 5 A 1 A 1
# 5 6 E 3 E 3