【问题标题】:How to reset a loop?如何重置循环?
【发布时间】:2018-07-25 13:10:32
【问题描述】:

大家好,我有这个数据集

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
  )

换句话说,我正在寻找一种可以在每次“药物”变量更改时重置的循环 我试过这段代码

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 无法重置,因为它在同时验证条件的同时指示行索引。

感谢您的帮助

【问题讨论】:

    标签: r loops reset


    【解决方案1】:

    您使用的是dplyr,所以请使用group_by,而不是循环。

    input %>% group_by(drug) %>% mutate(time = 1:n())
    

    可能您也想将member_id 添加到组中,但是由于您没有提到我不包括在内。如果是这样,只需 group_by(drug, member_id) 而不是 group_by(drug)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多