笔者对 children 字母知识发展进行了纵向研究. 在这项研究中,120名 children 在三个不同的时间点被安排了一项字母知识任务.

df页的前五行

> head(df)
   id      T1_date T1_letters      T2_date T2_letters      T3_date T3_letters
1 101  2022-10-17           4  2023-05-15          18  2023-12-11          26
2 102  2022-10-18           9  2023-05-15          20  2023-12-11          30
3 103  2022-10-17          14  2023-05-15          30  2023-12-11          30
4 104  2022-10-18           7  2023-05-15          17  2023-12-11          27
5 105  2022-10-17           1  2023-05-16          11  2023-12-12          26
6 106  2022-10-17           2  2023-05-15          11  2023-12-12          26

该数据集中的第一列("id")显示了参与者的ID号. 如您所见,所有时间点(即会议)的日期略有不同. 因此,一个子元素的T3日期可能与另一个子元素不同.

现在,我想画出随着时间的推移子元素们字母知识的得分. 每个子元素都应该被想象成一条线(所以:120条细线,连接每个子元素的三个分数). 该图的x轴应表示每一次会议的日期(每一次会议的日期略有不同), Y轴应该代表字母知识分数(这些分数的范围从0到34,因为我们还使用了有向图).

目前,我不需要 for each 参与者提供不同的 colored颜色 ,所以如果所有线条都是黑色的话就可以了. (但是,如果以后可以 Select 更改特定主题的 colored颜色 就好了)

生效日期:

df = structure(list(id = c(101, 102, 103, 104, 105, 106, 201, 202, 
203, 204, 205), T1_date = c("2022-10-17", "2022-10-18", "2022-10-17", 
"2022-10-18", "2022-10-17", "2022-10-17", "2022-12-01", "2022-12-01", 
"2022-12-01", "2022-11-23", "2022-11-23"), T1_letters = c(4, 
9, 14, 7, 1, 2, 3, 8, 0, 3, 8), T2_date = c("2023-05-15", "2023-05-15", 
"2023-05-15", "2023-05-15", "2023-05-16", "2023-05-15", "2023-03-28", 
"2023-03-28", "2023-03-29", "2023-03-27", "2023-03-27"), T2_letters = c(18, 
20, 30, 17, 11, 11, 4, 14, 4, 8, 8), T3_date = c("2023-12-11", 
"2023-12-11", "2023-12-11", "2023-12-11", "2023-12-12", "2023-12-12", 
"2023-09-21", "2023-09-21", "2023-09-21", "2023-09-18", "2023-09-18"
), T3_letters = c(26, 30, 30, 27, 26, 26, 10, 18, 8, 16, 18)), row.names = c(NA, 
-11L), class = "data.frame")

推荐答案

您需要将数据reshape 为"长"格式,每个会话占一行.这可以直接通过使用 pivot_longer()函数来自包tidyr.

library(tidyverse)

long <- df |>
  pivot_longer(
    cols = !id,
    names_to = c("session", ".value"),
    names_sep = "_"
  ) |>
  mutate(date = as.Date(date))

long
#> # A tibble: 33 × 4
#>       id session date       letters
#>    <dbl> <chr>   <date>       <dbl>
#>  1   101 T1      2022-10-17       4
#>  2   101 T2      2023-05-15      18
#>  3   101 T3      2023-12-11      26
#>  4   102 T1      2022-10-18       9
#>  5   102 T2      2023-05-15      20
#>  6   102 T3      2023-12-11      30
#>  7   103 T1      2022-10-17      14
#>  8   103 T2      2023-05-15      30
#>  9   103 T3      2023-12-11      30
#> 10   104 T1      2022-10-18       7
#> # ℹ 23 more rows

使用长格式的数据,您可以创建ggplot2的折线图, 将参与者id指定为要获得单独行的组.

ggplot(long, aes(date, letters, group = id)) + geom_line()

R相关问答推荐

从多个前置日期中获取最长日期

有没有一种方法可以从函数中创建一个值的列表,然后将这些值变成R中的直方图?我一直觉得不行

如何在RMarkdown LaTex PDF输出中包含英语和阿拉伯语?

如何从当前行上方找到符合特定条件的最接近值?

如何改变时间图R中的悬停信息?

条形图和在Ploly中悬停的问题

如何使用列表中多个列表中的第一条记录创建数据框

为了网络分析目的,将数据框转换为长格式列联表

找出二叉树中每个 node 在R中的深度?

在R中按行按列范围查找最大值的名称

如何用书面利率绘制geom_bar图

仅在Facet_WRAP()中的相应方面包含geom_abline()

在R函数中使用加号

为什么我使用geom_density的绘图不能到达x轴?

更新R中的数据表(使用data.table)

从多面条形图中删除可变部分

从线的交点创建面

R-如何在ggplot2中显示具有不同x轴值(日期)的多行?

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样

R,将组ID分配给另一个观测ID变量中的值的组合