我已经有一个id变量(Patient_id),并且每个id(blood_pressure)有多个观察值,但是我想要一个新的id变量,其中第一个id包含1,第二个id包含2,依此类推,在每个Patient_id中以此类推。请在链接中查看我感兴趣的数据格式。如何使用R生成“ order”变量?我想要这样的东西:
答案 0 :(得分:0)
这是使用dplyr
的解决方案。首先,我创建一个玩具数据框。 (对于以后的问题,如果发布可复制和粘贴的数据而不是图像,对我们来说更容易。dput
对此很有用。)
df <- data.frame(patient_id = c(1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4),
blood_pressure = sample(90:134, 12, replace = TRUE))
如下所示:
# patient_id blood_pressure
# 1 1 130
# 2 1 130
# 3 1 128
# 4 2 109
# 5 2 91
# 6 3 95
# 7 3 129
# 8 4 134
# 9 4 116
# 10 4 101
# 11 4 131
# 12 4 112
接下来,我加载所需的库。
library(dplyr)
然后,我按patient_id
分组,使用order
函数添加一个名为mutate
的变量,该变量是row_number
函数给定的每个组中的行号,最后ungroup
结果。
df %>%
group_by(patient_id) %>%
mutate(order = row_number()) %>%
ungroup
给予
# patient_id blood_pressure order
# <dbl> <int> <int>
# 1 1 130 1
# 2 1 130 2
# 3 1 128 3
# 4 2 109 1
# 5 2 91 2
# 6 3 95 1
# 7 3 129 2
# 8 4 134 1
# 9 4 116 2
# 10 4 101 3
# 11 4 131 4
# 12 4 112 5