我有一个数据集,患者在3个不同的日期都有3个测试分数。此时分数和日期都是独立的变量。为了可视化数据,我需要转换它(见下文)。
数据集现在的样子:
Patient Score_1. Score_2. score_3. date_score1. date_score2. date_score3.
1. 15 10 11 0 4 28
2. 12 9 11 0 7 31
3. 13 7 9 0 5 25
我需要将数据集转换为:
Patient Date. Score.
1. 0 15
1. 4 10
1. 28 11
2. 0 12
2. 7 9
2. 31 11
3. 0 13
3. 5 7
3. 25 9
Example_data:
structure(list(patient = c(1, 2, 3), Score_1 = c(15, 12, 13),
Score_2 = c(10, 9, 7), Score_3 = c(11, 11, 9), Date_score1 = c(0,
0, 0), Date_score2 = c(4, 7, 5), Date_score3 = c(28, 31,
25)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-3L))
我已经尝试使用pivot_longer转换数据,最接近我想要的是下面的代码。
plotdata <- pivot_longer(
example_data
, cols = -c(Patient, Score_1, Score_2, Score_3)
, names_to = c( NA, "date_score")
, names_sep = "_"
, values_to = "Date"
)
”””开始是好的,我会说。现在我需要将相应的分数添加到date_score中,但我似乎不知道如何操作。我尝试了(但失败了)下面的代码。
plotdata <- pivot_longer(
plotdata
, cols = -c(patient, date_score, Date)
, names_to = c( NA, "Score_")
, names_sep = "_"
, values_to = "Score"
)
如果任何人有一个想法,我可以做的第二步转换数据,请让我知道!
2条答案
按热度按时间bvhaajcl1#
使用
pivot_longer
,我们可以使用names_pattern
捕获_
之前的字符,并将names_to
指定为.value
tzcvj98z2#
我尽了最大的努力只用
pivot_longer()
来处理这个问题,但我也失败了。这里有一个使用
data.table
的替代解决方案。输出