【问题标题】:multiple condition in rr中的多个条件
【发布时间】:2020-03-20 21:22:16
【问题描述】:

有没有更好的方法来拥有多个条件以简化我的代码。 这是我所说的一个例子。

library(data.table)
test <- data.table(dx1 <- c("a", "b", "c"),
                   dx2 <- c("b", "c", "d"),
                   dx3 <- c("a", "f", "g"))

condition <- c("a", "b")

# This is what I want to simplify
test[,dx4 := ifelse(dx1 %in% condition|
                    dx2 %in% condition |
                    dx3 %in% condition, 1, 0)]

谢谢

【问题讨论】:

    标签: r if-statement data.table


    【解决方案1】:

    我们可以使用Reduce|。在.SDcols 中指定感兴趣的列(如果使用了所有列,则不需要),遍历Data.table 的子集(.SD),检查“条件”元素是否为%in% 列,@ 987654326@ 使用| 将其转换为逻辑vector 并使用as.integer+ 转换为二进制

    test[, dx4 := +(Reduce(`|`, lapply(.SD, `%in%`, condition))), .SDcols = dx1:dx3]
    test
    #   dx1 dx2 dx3 dx4
    #1:   a   b   a   1
    #2:   b   c   f   1
    #3:   c   d   g   0
    

    数据

    test <- data.table(dx1 = c("a", "b", "c"),
                   dx2 = c("b", "c", "d"),
                   dx3 = c("a", "f", "g"))
    

    【讨论】:

    • 谢谢,这正是我要找的!
    • 这是一个很好的解决方案。我想指出平凡:在“i”中,可以设置一个条件来更改“set”命令的结果:test[dx1 %in% condition,dx4 := [what is needed here]]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2019-01-30
    相关资源
    最近更新 更多