我為我的情況制作了一個示例資料框:
df <- data.frame(ID=c(1,2,3,4), AGE1=c(25,32,29,45), AGE2=c(27,34,31,47), AGE3=c(29,36,33,49), AGE4=c(31,38,35,51), SCORE1=c(20,9,12,19), SCORE2=c(9,10,17,12), SCORE3=c(15,12,13,15), SCORE4=c(13,12,8,12))

我的資料框的格式是縱向的,所以每個人的年齡隨著每次回應而增加,相應的分數也會被記錄下來。AGE1 對應 SCORE1,AGE2 對應 SCORE2,以此類推。
最后,x 軸應該是年齡,y 軸應該是分數。每行應該有自己的行,包含 4 個資料點。
我制作了資料框的外觀(轉換后)。然后我可以按 ID 分組并將線條覆寫到圖上,我認為:

似乎我必須使用 pivot_longer 或 melt 但我無法弄清楚如何將每個年齡列與分數列映射。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
三種可能的方式:
pivot_longer與引數tidyr一起使用。names_sep為此,我們重命名所有相關列以放入分隔符(這里我們使用_)pivot_longer與引數tidyr一起使用。names_pattern這里我們不必重命名列,但我們必須使用特殊的正則運算式:"(.*?)(\\d )$"- 使用
pivot_longerfromtidyr帶names_sep引數但不使用特殊正則運算式再次重命名:
方式一:
library(dplyr)
library(tidyr)
library(stringr)
df %>%
rename_with(., ~str_replace(., 'E', 'E_')) %>%
pivot_longer(
cols = -ID,
names_to = c(".value", "name"),
names_sep = "_") %>%
select(-name)
方式二:
library(dplyr)
library(tidyr)
df %>%
pivot_longer(
cols = -ID,
names_to = c(".value", "name"),
names_pattern = "(.*?)(\\d )$") %>%
select(-name)
方式3:
library(dplyr)
library(tidyr)
df %>%
pivot_longer(
cols = -ID,
names_to = c(".value", "name"),
names_sep = "(?<=[A-Za-z])(?=[0-9])") %>%
select(-name)
ID AGE SCORE
<dbl> <dbl> <dbl>
1 1 25 20
2 1 27 9
3 1 29 15
4 1 31 13
5 2 32 9
6 2 34 10
7 2 36 12
8 2 38 12
9 3 29 12
10 3 31 17
11 3 33 13
12 3 35 8
13 4 45 19
14 4 47 12
15 4 49 15
16 4 51 12
uj5u.com熱心網友回復:
也許您最終想這樣做(盡管這是我朋友回答的擴展)
df %>%
pivot_longer(
cols = -ID,
names_to = c(".value", "name"),
names_pattern = "(.*?)(\\d )$") %>%
ggplot(aes(AGE, SCORE, group = ID, color = as.factor(ID)))
geom_point()
geom_line()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527259.html
標籤:rggplot2蒂迪尔
