【问题标题】:Create Binary Variable based on lag in R根据 R 中的滞后创建二进制变量
【发布时间】:2017-10-07 08:57:54
【问题描述】:

我想根据滞后观察创建一个二元/指标变量。我有一个变量 X1。原始数据如下所示。这是一个样本数据。原始数据有接近 10K 条记录。

X1
Diagnosis
1
2
3
4
Treatment
1
2
3

我希望输出看起来像这样:

X1           NewVar
Diagnosis    Diagnosis
1            Diagnosis
2            Diagnosis
3            Diagnosis 
4            Diagnosis 
Treatment    Treatment 
1            Treatment  
2            Treatment
3            Treatment  

任何帮助将不胜感激!

【问题讨论】:

  • 显示您已采取哪些步骤来解决此问题。向我们展示代码以及导致问题的具体部分。

标签: r dplyr


【解决方案1】:

您可以通过cumsum 实现此目的。每次出现DiagnosisTreatment 时,cumsum 可以创建一个新组。那么每组中的NewVar会取该组中第一个X1的值:

library(dplyr)

dtf %>%
    mutate(g = cumsum(X1 == 'Diagnosis' | X1 == 'Treatment')) %>%
    group_by(g) %>%
    mutate(NewVar = X1[1]) %>%
    ungroup() %>% select(-g)
# # A tibble: 9 x 2
#          X1    NewVar
# <fctr>    <fctr>
# 1 Diagnosis Diagnosis
# 2         1 Diagnosis
# 3         2 Diagnosis
# 4         3 Diagnosis
# 5         4 Diagnosis
# 6 Treatment Treatment
# 7         1 Treatment
# 8         2 Treatment
# 9         3 Treatment

上面代码中的dtf

> dput(dtf)
structure(list(X1 = structure(c(5L, 1L, 2L, 3L, 4L, 6L, 1L, 2L, 
3L), .Label = c("1", "2", "3", "4", "Diagnosis", "Treatment"), class = "factor")), .Names = "X1", class = "data.frame", row.names = c(NA, 
-9L))

【讨论】:

    【解决方案2】:

    这是data.table 的选项。转换为'data.table'后(setDT(dtf),以'X1'值作为字符获取逻辑向量的累积和,并将'NewVar'指定为'X1'的第一个元素(X1[1]

    library(data.table)
    setDT(dtf)[,  NewVar := X1[1], cumsum(grepl('^[A-Za-z]+$', X1))]
    dtf
    #          X1    NewVar
    #1: Diagnosis Diagnosis
    #2:         1 Diagnosis
    #3:         2 Diagnosis
    #4:         3 Diagnosis
    #5:         4 Diagnosis
    #6: Treatment Treatment
    #7:         1 Treatment
    #8:         2 Treatment
    #9:         3 Treatment
    

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2013-08-31
      • 2023-03-21
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多