【问题标题】:create a new variable using specific sets of sequential values in another column使用另一列中的特定顺序值集创建新变量
【发布时间】:2018-06-11 23:09:06
【问题描述】:

我正在尝试创建一个新变量,其中的值被分配为另一列中特定顺序值集的函数。 下面是一个报告 10 次测试的状态(阳性或阴性)的示例:

    df<-data.frame(Trank=c(1:10), status=c(0,1,0,0,1,1,0,1,0,1))

现在,新列“class”中的值应该按照一些规则分配,例如:如果当前测试为阴性但前两次测试为阳性,则为 class="a",如果当前测试为阳性,则为 class=="b"当前测试为阳性但前一次为阴性,否则为 class=="c"。在这个例子中,我会得到类似的东西:

Trank status class
  1      0     c
  2      1     b
  3      0     c
  4      0     c
  5      1     b
  6      1     c
  7      0     a
  8      1     b
  9      0     c
 10      1     b

而且我不知道获得这个输出的条件函数应该是怎样的。 我很抱歉没有发布任何尝试,但我真的坚持这一点。任何建议/建议将不胜感激!非常感谢!

【问题讨论】:

    标签: r conditional data-manipulation


    【解决方案1】:

    我们可以使用dplyr::lagdplyr::case_when 来编码不同的条件

    library(tidyverse)
    df %>%
        mutate(class = case_when(
            status == 0 & lag(status) == 1 & lag(status, n = 2L) == 1 ~ "a",
            status == 1 & lag(status) == 0 ~ "b",
            TRUE ~ "c"))
    #   Trank status class
    #1      1      0     c
    #2      2      1     b
    #3      3      0     c
    #4      4      0     c
    #5      5      1     b
    #6      6      1     c
    #7      7      0     a
    #8      8      1     b
    #9      9      0     c
    #10    10      1     b
    

    【讨论】:

    • 这是一个我不知道的非常有用的功能,非常感谢!
    猜你喜欢
    • 2022-06-14
    • 2021-07-23
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多