想象一下,我有以下 tibble 作为我的数据。如您所见,有些列的名称类似于name1.x
, 和name2.x
,但实际上在我的真实数据集中有数十个。
MWE
test <- tibble(subject = c(1,1,1, 2, 2, 2, 2, 3, 3),
name1.x = c(2, 4, 5, 2, 3, 6, 8, 1.2, 10),
name2.x = c(1, 6, 8, 1.2, 9, 6, 66, 1.2, 20),
visit = factor(c("base", "v1", "v2", "base", "v1", "v2", "v3", "base", "v1")))
subject name1.x name2.x visit
<dbl> <dbl> <dbl> <fct>
1 1 2 1 base
2 1 4 6 v1
3 1 5 8 v2
4 2 2 1.2 base
5 2 3 9 v1
6 2 6 6 v2
7 2 8 66 v3
8 3 1.2 1.2 base
9 3 10 20 v1
我想要什么?
根据他们的base
访问对我的目标列中的值进行重新缩放,当然还可以根据他们的名称创建新列。对应于一个主题的所有v
值都应重新调整为它们的对应base
值。所以对于主题 1,name1.x
第一个值是2
并且它恰好是一个基值,所以它必须给我们2/2=1
,第二个值是 4 必须给我们4/2=2
,依此类推......这些新值必须在一个名称对应的新列中创建对其同源列,name1.x
应给出name1.y
和name2.x
-> name2.y
。如何使用 tidyverse 实现这一目标?