我一直在研究各种将列名作为变量传递的建议方法,例如使用 bang bang (!!xvar)、as.name(xvar) 和其他各种方法,但我无法让它工作。
有谁知道如何传递mtcars
中使用的列名在下面的管道中作为变量?
即
xvar <- 'mpg'
yvar <- 'cyl'
构建我的数据的虚拟数据以进行连接,用于确定要切换的选定行 T <-> F
newData <- data.frame(trace = 0, point = 1:6, 'x' = unlist(mtcars[ c(1,3,5,9:11) ,1]), y = unlist(mtcars[ c(1,3,5,9:11) ,c('cyl')]))
rownames(newData) <- NULL
mtcars$Selected <- T
mtcars %>%
mutate(Selected = if_else(row_number() %in% {mtcars %>%
mutate(rn = row_number()) %>%
inner_join(distinct(newData), by = c('mpg' = "x", "cyl" = 'y')) %>%
pull(rn)}, !Selected, Selected))
但我需要通过'mpg'
和'cyl'
作为变量:xpar
和ypar
因为它们来自 Shiny App
中的下拉菜单
xpar <- 'mpg' #(input$xpar_selector in shiny App)
ypar <- 'cyl' #(input$ypar_selector in shiny App)
最佳答案
一个选项是使用setNames
...
inner_join(distinct(newData), by = setNames(c('x', 'y'), c(xvar, var)))
...
完整代码
mtcars %>%
mutate(rn = row_number()) %>%
inner_join(distinct(newData), by = setNames(c('x', 'y'), c(xvar, yvar))) %>%
pull(rn)
#[1] 1 2 3 3 5 9 9 10 11
实际完整代码:
mtcars %>%
mutate(Selected = if_else(row_number() %in% {
mtcars %>%
mutate(rn = row_number()) %>%
inner_join(distinct(newData), by = setNames(c('x', 'y'), c(xvar, yvar))) %>%
pull(rn)
},
!Selected, Selected))
关于r - 如何使用 dplyr 将 2 个列集的内连接的列名称作为变量传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56468711/