r - 如果一个参与者在不同的行中有多个条目,如何可视化数据?
问题描述
我目前正在研究一个由多个参与者组成的数据集。一些参与者参加了所有后续行动,而另一些参与者则跳过了一些后续行动。
例如,在下面的数据集中,参与者 2 仅参与了第 3 次随访,参与者 3 仅参与了第 2 次和第 3 次随访。您还可以看到一些参与者有超过 1 行的条目,因为他们有多个跟进。
原始数据集只有第一列和第二列。因为我的目标是创建这样的进度表
我尝试使用以下代码为每次访问创建额外的列:
participant <- c(1,1,1,2,3,3,4,5,5,5 )
visit <- c(1,2,3,3,2,3,1,1,2,3)
df <- data.frame(participant, visit)
df[,3] <- as.integer(df$visit=="1")
df[,4] <- as.integer(df$visit=="2")
df[,5] <- as.integer(df$visit=="3")
colnames(df)[colnames(df) %in% c("V3","V4","V5")] <- c(
"Visit1","Visit2","Visit3")
但是,我仍然很难组合同一参与者的行,因此我无法继续制作图表(我也不知道)。我尝试了“重塑”功能,但没有成功。group_by 函数也没有成功,仍然显示原始数据集
df1 <- df[,-2]
df1 %>%
group_by(participant)
我应该将这种情况用于什么功能:
- 合并同一参与者的行?
- 如何制作进度图?
预先感谢您的帮助!
解决方案
根据您的df
情况,您可以生成图表
library(ggplot2)
library(dplyr)
df %>%
ggplot(aes(x = as.factor(visit),
y = as.factor(participant),
fill = as.factor(visit))) +
geom_tile(aes(width = 0.7, height = 0.7), color = "black") +
scale_fill_grey() +
xlab("Visit") +
ylab("Participants") +
guides(fill = "none")
如果您需要宽格式的 data.frame(类似于显示的图像,但每个参与者只有一行),请使用
library(tidyr)
library(dplyr)
df %>%
mutate(value = 1) %>%
pivot_wider(
names_from = visit,
values_from = value,
names_glue = "Visit{visit}",
values_fill = 0)
要得到
# A tibble: 5 x 4
participant Visit1 Visit2 Visit3
<dbl> <dbl> <dbl> <dbl>
1 1 1 1 1
2 2 0 0 1
3 3 0 1 1
4 4 1 0 0
5 5 1 1 1
推荐阅读
- html - flexbox中元素的排序
- django - 如何通过 URL 条件过滤模板中的 HTML 内容
- visual-studio-code - VSCode Explorer 中的伪折叠文件
- apache-nifi - NiFi - 非堆使用越来越大
- php - 要计算和分组的范围
- sql - 使用 Regx 提取信息
- android - 在android上通过AnimationDrawable获取当前动画帧
- python - 使用 Beautifulsoup 传递表数据
- java - 在发布新帖子之前为用户提供类似帖子的功能的逻辑是什么?
- flutter - 创建 StatefulWidget 时访问 Flutter 上下文