如何基于条件为纵向数据集中的变量创建等级?

时间:2018-07-29 03:14:59

标签: r rank longitudinal

我有一个纵向数据集,其中每个主题都代表不止一次。一个代表一个病人的入院。每次入学,无论主题是什么,都有一个唯一的“关键”。我需要弄清楚哪个准入是“ INDEX”准入,即第一次准入,以便我知道哪些行是后续的RE准入。要使用的变量是“ Daystoevent”;最低的数字表示INDEX入场。我想基于以下条件创建一个新变量:对于每个主题,变量“ Daystoevent”中的最低数字是“索引”入场,随后的每个数字都将获得一个数字“ 1”,“ 2”等。我想这样做无需更改为水平格式。

数据集如下:

  

Subject Daystoevent Key A 5 rtwe A 8 erer B 3 tter B 8 qgfb A 2 sada C 4 ccfw D 7 mjhr B 4 sdfw C 1 srtg C 2 xcvs D 3 muyg

不胜感激。

1 个答案:

答案 0 :(得分:0)

这可能不是一个很好的解决方案,但可以完成工作:

library(dplyr)

df <- df %>%
  group_by(Subject) %>%
  arrange(Subject, Daystoevent) %>%
  mutate(
    Admission = if_else(Daystoevent == min(Daystoevent), 0, 1),
  ) %>%
  ungroup()

for(i in 1:(nrow(df) - 1)) {
  if(df$Admission[i] == 1) {
    df$Admission[i + 1] <- 2
  } else if(df$Admission[i + 1] != 0){
    df$Admission[i + 1] <- df$Admission[i] + 1
  }
}

df[df == 0] <- "index"

df
# # A tibble: 11 x 4
#    Subject Daystoevent Key   Admission
#    <chr>         <dbl> <chr> <chr>    
#  1 A                 2 sada  index    
#  2 A                 5 rtwe  1        
#  3 A                 8 erer  2        
#  4 B                 3 tter  index    
#  5 B                 4 sdfw  1        
#  6 B                 8 qgfb  2        
#  7 C                 1 srtg  index    
#  8 C                 2 xcvs  1        
#  9 C                 4 ccfw  2        
# 10 D                 3 muyg  index    
# 11 D                 7 mjhr  1

数据:

df <- data_frame(
  Subject = c("A", "A", "B", "B", "A", "C", "D", "B", "C", "C", "D"),
  Daystoevent = c(5, 8, 3, 8, 2, 4, 7, 4, 1, 2, 3),
  Key = c("rtwe", "erer", "tter", "qgfb", "sada", "ccfw", "mjhr", "sdfw", "srtg", "xcvs", "muyg")
)