如何重置循环?
How to reset a loop?
大家好,我有这个数据集
library(dplyr)
library(tidyr)
input<- frame_data(
~member_id, ~fill_date , ~drug, ~days_supply,
"603", "02/17/2005", "a", 30,
"603", "06/13/2005", "a", 30,
"603", "08/11/2005", "a", 30,
"603", "06/12/2006", "b", 15,
"603", "05/09/2006", "b", 30
)
我正在尝试创建一个名为 "time" 的变量,它指示变量 "drug" 出现的次数。所以输出应该是这样的
output<- frame_data(
~member_id, ~fill_date , ~drug, ~days_supply, ~time,
"603", "02/17/2005", "a", 30, 1,
"603", "06/13/2005", "a", 30, 2,
"603", "08/11/2005", "a", 30, 3,
"603", "06/12/2006", "b", 15, 1,
"603", "05/09/2006", "b", 30 2
)
换句话说,我正在寻找一种每次 "drug" 变量更改时都可以重置的循环
我试过这段代码
time<-1
i<-2
j<-1
while (i <=nrow(input)){
if (input[i,3,drop=]==input[i-1,3,drop=]){
j<-i
time<-c(time,j)
}else{
j<-1
time<-c(time,j)
}
i<-i+1
}
但当然它不起作用,因为 i 无法重置,因为它指示行索引,同时验证条件。
感谢您的帮助
您正在使用 dplyr
,因此请使用 group_by
,而不是循环。
input %>% group_by(drug) %>% mutate(time = 1:n())
您可能还想将 member_id
添加到分组依据中,但由于您没有提及,所以我不包括在内。如果是这样,只需 group_by(drug, member_id)
而不是 group_by(drug)
.
大家好,我有这个数据集
library(dplyr)
library(tidyr)
input<- frame_data(
~member_id, ~fill_date , ~drug, ~days_supply,
"603", "02/17/2005", "a", 30,
"603", "06/13/2005", "a", 30,
"603", "08/11/2005", "a", 30,
"603", "06/12/2006", "b", 15,
"603", "05/09/2006", "b", 30
)
我正在尝试创建一个名为 "time" 的变量,它指示变量 "drug" 出现的次数。所以输出应该是这样的
output<- frame_data(
~member_id, ~fill_date , ~drug, ~days_supply, ~time,
"603", "02/17/2005", "a", 30, 1,
"603", "06/13/2005", "a", 30, 2,
"603", "08/11/2005", "a", 30, 3,
"603", "06/12/2006", "b", 15, 1,
"603", "05/09/2006", "b", 30 2
)
换句话说,我正在寻找一种每次 "drug" 变量更改时都可以重置的循环 我试过这段代码
time<-1
i<-2
j<-1
while (i <=nrow(input)){
if (input[i,3,drop=]==input[i-1,3,drop=]){
j<-i
time<-c(time,j)
}else{
j<-1
time<-c(time,j)
}
i<-i+1
}
但当然它不起作用,因为 i 无法重置,因为它指示行索引,同时验证条件。
感谢您的帮助
您正在使用 dplyr
,因此请使用 group_by
,而不是循环。
input %>% group_by(drug) %>% mutate(time = 1:n())
您可能还想将 member_id
添加到分组依据中,但由于您没有提及,所以我不包括在内。如果是这样,只需 group_by(drug, member_id)
而不是 group_by(drug)
.