gpt4 book ai didi

r - dplyr:取消选择由给出的列

转载 作者:行者123 更新时间:2023-12-04 14:09:05 24 4
gpt4 key购买 nike

如何取消选择 ... 中给出的列自写函数的参数。 (我还需要在另一点选择列,因此仅在 - 中指定带有 ... 的列并不能解决我的问题。)

任何解决方案都值得赞赏,select -助手,操纵quosures或表达,...

# very simple example data
test <- data.frame(a=1:3, b=1:3, c=1:3)

# function skeleton
testfun <- function(x, ...){
y <- select(x, ...)
z <- select(x, -...) # does of course not work like this
return(list(y, z)) # just as an example
}

# calling the function to select different columns
testfun(test, a)
testfun(test, a, b)

最佳答案

这些最简单的解决方案是选择正列,然后比较名称以找出要删除的列,如 this answer .

要直接处理点,

  • 我们将在 quosures ( quos ) 列表中捕获它们。
  • 取消引用并用 UQS 拼接点为正选择。
  • c() 里面做同样的事情这样我们就有了一个选择向量。
  • 否定该向量以进行否定选择。

  • 这是(3)和(4)描述的变换。
    library(dplyr)
    dots <- quos(a, b)
    quos(-c(UQS(dots)))
    #> [[1]]
    #> <quosure: frame>
    #> ~-c(~a, ~b)
    #>
    #> attr(,"class")
    #> [1] "quosures"

    完整的解决方案是
    test <- data.frame(a = 1:3, b = 1:3, c = 1:3)

    # function skeleton
    testfun <- function(x, ...) {
    dots <- quos(...)
    y <- select(x, UQS(dots))
    z <- select(x, -c(UQS(dots)))
    return(list(y, z))
    }

    testfun(test, a)
    #> [[1]]
    #> a
    #> 1 1
    #> 2 2
    #> 3 3
    #>
    #> [[2]]
    #> b c
    #> 1 1 1
    #> 2 2 2
    #> 3 3 3

    testfun(test, a, b)
    #> [[1]]
    #> a b
    #> 1 1 1
    #> 2 2 2
    #> 3 3 3
    #>
    #> [[2]]
    #> c
    #> 1 1
    #> 2 2
    #> 3 3

    测试选择助手。
    testfun(test, starts_with("b"), one_of("c"))
    #> [[1]]
    #> b c
    #> 1 1 1
    #> 2 2 2
    #> 3 3 3
    #>
    #> [[2]]
    #> a
    #> 1 1
    #> 2 2
    #> 3 3

    关于r - dplyr:取消选择由给出的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46828296/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com