我一直在尝试使用ggplot2从数据集中绘制数据。在下面,您可以看到该图。观察数放置在x轴上,而在行为评级量表上获得的分数则绘制在y轴上。这些分数是在两个连续的条件下收集的(A =基线,B =干预),每个条件的时长各不相同。
df <- read.table(header = TRUE, text = "
case measure session phase_id outcome condition
1 1 3 1 A 4 A
2 1 3 2 A 10 A
3 1 3 3 A 10 A
4 1 3 4 B 10 B
5 1 3 5 B 10 B
6 1 3 6 B 10 B
7 1 3 7 B 12 B
8 1 3 8 B 10 B
9 1 3 9 B 20 B
10 3 3 1 A 13 A
11 3 3 2 A 12 A
12 3 3 3 A 5 A
13 3 3 4 A 0 A
14 3 3 5 A 10 A
15 3 3 6 A 4 A
16 3 3 7 A 3 A
17 3 3 8 B 4 B
18 3 3 9 B 14 B
19 3 3 10 B 25 B
20 3 3 11 B 25 B
21 3 3 12 B 20 B
22 3 3 13 B 25 B
23 3 3 14 B 24 B
24 3 3 15 B 13 B
25 6 3 1 A 7 A
26 6 3 2 A 6 A
27 6 3 3 A 9 A
28 6 3 4 A 0 A
29 6 3 5 A 9 A
30 6 3 6 B 6 B
31 6 3 7 B 14 B
32 6 3 8 B 6 B
33 6 3 9 B 7 B
")
我想做的是在图的中间建立一个点,所有与阶段A相关的数据都将结束,以便阶段A将在同一点结束,阶段B将在同一点开始每个参与者的积分。
df %>%
ggplot(aes(session, outcome, color)) +
geom_line(aes(group = case, color = condition), size = 0.1, alpha = 0.4) +
geom_smooth(aes(color = condition), size = 2, method = "lm") +
theme_minimal() +
theme(legend.position = "none")
更新
这就是我想要的解决方案(也许在两个阶段之间没有连续的线)。
感谢您的帮助!
答案 0 :(得分:1)
尽管我不太了解Session的变化,但我想你想要这样的东西:
endVal <- max( df[df$phase_id=="A","session"] )
endVal计算阶段A中的最后一个值。变量session2根据该值进行移位。
addToCase <- df %>%
filter(phase_id=="A") %>%
group_by(case) %>%
summarise(addValue = endVal - max(session) )
dataPhases <- merge(df, addToCase, by="case") %>%
mutate(session2 = session + addValue)
dataPhaseA <- dataPhases %>%
filter(phase_id == "A")
dataPhaseB <- dataPhases %>%
filter(phase_id == "B")
还有ggplot:
ggplot(dataPhaseA,
aes(x=session2, y=outcome, colour=phase_id, group=case) ) +
geom_line() +
geom_smooth(aes(group=phase_id), size = 2, method = "lm") +
geom_line(data=dataPhaseB,
aes(x=session2, y=outcome, colour=phase_id, group=case) ) +
geom_smooth(data=dataPhaseB, aes(group=phase_id), size = 2, method = "lm") +
theme_minimal() +
theme(legend.position = "none")