假设一个绘图选择函数给了我一个x和y坐标(值)的数据框,我们可以用以下命令人工生成它:
newData <- mtcars[ c(1,3,5,9:11) ,c('mpg', 'cyl')]
rownames(newData) <- NULL
colnames(newData) <- c('x', 'y')
x y
1 21.0 6
2 22.8 4
3 18.7 8
4 22.8 4
5 19.2 6
6 17.8 6
如何找出原始mtcars
中的哪些行(即行号)包含这些x/y值组合?
我知道我可以加入他们两个,
inner_join(mtcars, newData[ ,c('x', 'y')], by = c("mpg" = "x", "cyl" = 'y'))
这给了我一个完整的数据帧,但我只需要行号
我需要在这个里面用到:
mtcars$selected <- T
mtcars %>%
(selected = if_else(row_number() %in% '#ANSWER', !selected, selected))
为了从F< all >->>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))
为了将列名作为变量传递(比如来自R Shiny中的下拉菜单时),我们可以使用setNames(c('x', 'y'), c(xvar, yvar)))
xpar <- 'mpg' #(input$xpar_selector in shiny App)
ypar <- 'cyl' #(input$ypar_selector in shiny App)
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))
How to pass column names for inner join by 2 column sets as variables with dplyr
预期结果为:
发布于 2019-06-06 02:43:29
这里有一种方法-
mtcars %>%
mutate(rn = row_number()) %>%
inner_join(distinct(newData), by = c("mpg" = "x", "cyl" = 'y')) %>%
pull(rn)
[1] 1 2 3 5 9 10 11
下面是如何在你的代码中插入这段代码-
mtcars$selected <- TRUE
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))
这里有一个更简单的方法来实现你的结果-
mtcars %>%
left_join(
newData %>%
distinct() %>%
mutate(selected = FALSE),
by = c("mpg" = "x", "cyl" = 'y')
) %>%
mutate(
selected = if_else(is.na(selected), TRUE, selected)
)
然而,我对您试图在这里实现的目标感到困惑。也许你只是在寻找一个anti_join
,比如从mtcars
中获取newData
中没有的行--
mtcars %>%
anti_join(newData, by = c("mpg" = "x", "cyl" = 'y'))
发布于 2019-06-06 02:27:20
这里有一个选项:
library(dplyr,warn.conflicts = FALSE)
newData %>%
distinct() %>%
mutate(match = TRUE) %>%
left_join(mtcars, by= c(mpg ="x", cyl="y"),.) %>%
pull(match) %>%
which()
#> [1] 1 2 3 5 9 10 11
https://stackoverflow.com/questions/56466006
复制相似问题