首页 > 解决方案 > 如果一个参与者在不同的行中有多个条目,如何可视化数据?

问题描述

我目前正在研究一个由多个参与者组成的数据集。一些参与者参加了所有后续行动,而另一些参与者则跳过了一些后续行动。

例如,在下面的数据集中,参与者 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)

我应该将这种情况用于什么功能:

  1. 合并同一参与者的行?
  2. 如何制作进度图?

预先感谢您的帮助!

标签: r

解决方案


根据您的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

推荐阅读