gpt4 book ai didi

r - 使用 Tidyverse 计算多列中 REDCap 数据中特定字符串的频率

转载 作者:行者123 更新时间:2023-12-03 08:38:08 25 4
gpt4 key购买 nike

我经常收到来自 REDCap 调查的数据,其中允许受访者“检查”>1 对调查问题的答复。每个潜在的响应都位于其自己的列中。我想总结一下检查每个响应选项(列)的频率。例如:

library(tidyverse)
set.seed(1234)
responses<-c("Checked", "Unchecked")
numobs<-10

my_example<-data.frame(id=1:10,
Response_Option_A=sample(responses, numobs, replace=TRUE),
Response_Option_B=sample(responses, numobs, replace=TRUE),
Response_Option_C=sample(responses, numobs, replace=TRUE),
Response_Option_D=sample(responses, numobs, replace=TRUE),
stringsAsFactors = FALSE)

my_example
#> id Response_Option_A Response_Option_B Response_Option_C Response_Option_D
#> 1 1 Unchecked Unchecked Unchecked Checked
#> 2 2 Unchecked Unchecked Unchecked Unchecked
#> 3 3 Unchecked Unchecked Unchecked Checked
#> 4 4 Unchecked Checked Unchecked Checked
#> 5 5 Checked Unchecked Unchecked Checked
#> 6 6 Unchecked Unchecked Unchecked Unchecked
#> 7 7 Checked Unchecked Checked Checked
#> 8 8 Checked Checked Unchecked Unchecked
#> 9 9 Checked Unchecked Unchecked Unchecked
#> 10 10 Unchecked Unchecked Unchecked Checked

我最初的想法是尝试这个,但它返回检查的响应总数,而不是每列中的数字。

my_example %>%
select(starts_with("Response_Option_")) %>%
summarise(checked=sum(.=="Checked"))
#> checked
#> 1 13

reprex package于2020年8月10日创建(v0.3.0)

非常感谢您帮助有效地总结这些回复。

最佳答案

这是一种 tidyverse 方法,用于显示每列而不是行的响应总数。我认为,根据您提出问题的方式,这就是您正在寻找的。还包括 starts_with() 函数,该函数包含在您的问题标签中。

我们可以使用pivot_longer()将响应特征从宽转为长,然后使用group_by定义变量,采用现有表并将其转换为分组表其中 summarise() 操作用于创建一个新的数据框,其中为每个分组变量组合提供行。

library(tidyverse)
set.seed(1234)
responses<-c("Checked", "Unchecked")
numobs<-10

my_example<-data.frame(id=1:10,
Response_Option_A=sample(responses, numobs, replace=TRUE),
Response_Option_B=sample(responses, numobs, replace=TRUE),
Response_Option_C=sample(responses, numobs, replace=TRUE),
Response_Option_D=sample(responses, numobs, replace=TRUE),
stringsAsFactors = FALSE)

my_example %>%
pivot_longer(starts_with("Response_"), names_to = "Responses",
values_to = "value") %>%
group_by(Responses, value) %>%
summarise(total_responses = n())


#> # A tibble: 8 x 3
#> # Groups: Responses [4]
#> Responses value total_responses
#> <chr> <chr> <int>
#> 1 Response_Option_A Checked 4
#> 2 Response_Option_A Unchecked 6
#> 3 Response_Option_B Checked 2
#> 4 Response_Option_B Unchecked 8
#> 5 Response_Option_C Checked 1
#> 6 Response_Option_C Unchecked 9
#> 7 Response_Option_D Checked 6
#> 8 Response_Option_D Unchecked 4

reprex package于2020年8月10日创建(v0.3.0)

如果您只需要 Checked 响应,您可以在 summarise() 操作后添加以下代码行:

filter(value == "Checked")

#> # A tibble: 4 x 3
#> # Groups: Responses [4]
#> Responses value total_responses
#> <chr> <chr> <int>
#> 1 Response_Option_A Checked 4
#> 2 Response_Option_B Checked 2
#> 3 Response_Option_C Checked 1
#> 4 Response_Option_D Checked 6

关于r - 使用 Tidyverse 计算多列中 REDCap 数据中特定字符串的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63348628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com