r - 如何使用 dplyr 将 2 个列集的内连接的列名称作为变量传递

标签 r dplyr

我一直在研究各种将列名作为变量传递的建议方法,例如使用 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'作为变量:xparypar 因为它们来自 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/

相关文章:

r - 在一个窗口中绘制多个 xts 对象

r - 在 R 中的 select 操作符中使用 %in%

r - 在 dplyr 的重命名函数中以字符串形式输入新列名称

R split apply 与 dplyr 结合使用 - 如何保持切片产生的 NA

r - ggplot2 中的 geom_bar 宽度

r - 如何更改特定线条的粗细和/或在多线图中添加形状?

调整 strip.background 的大小以匹配 ggplot facet_wrap 中的 strip.text

r - 根据 R 中的另一个点数据集为多边形中的每个点着色

r - 如何在R中计算前几年的运行总计?

r - 通过 data.table 或 dplyr 中的分组列选择每个数字列的最大绝对值