如何仅在特定类型的列上使用select()而不会丢失其他类型的列?

时间:2018-08-13 08:11:47

标签: r select dplyr

有一些类似的问题(like hereor here),但是没有一个我正在寻找的答案。

问题:

如何仅在特定类型的列上使用select()?

usage: ipykernel_launcher.py [-h] [-m None] [-o None] [-n 100] ipykernel_launcher.py: error: unrecognized arguments: -f /run/user/1000/jupyter/kernel-c8cbd248-0ec5-4ad8-8c42-bdbc43353f55.json An exception has occurred, use %tb to see the full traceback. SystemExit: 2 select_if()中使用的选择帮助器功能只能引用列名或索引。在这种特殊情况下,我想选择某种类型(数字)的列,然后根据它们的列总和选择它们的一个子集,同时又不丢失其他类型(字符)的列。

我想做什么:

select_at()

这不起作用,因为select_at()无法将tibbly = tibble(x = c(1,2,3,4), y = c("a", "b","c","d"), z = c(9,8,7,6)) # A tibble: 4 x 3 x y z <dbl> <chr> <dbl> 1 1 a 9 2 2 b 8 3 3 c 7 4 4 d 6 tibbly %>% select_at(is.numeric, colSums(.) > 12) Error: `.vars` must be a character/numeric vector or a `vars()` object, not primitive 识别为选择列的适当函数。

如果我做类似的事情:

is.numeric

我设法只选择总和> 12的列,但是我也松开了字符列。我想避免以后再重新连接丢失的列。

是否有一种更好的方法,可以根据名称/索引以外的其他属性,以dplyr方式选择列?

谢谢!

1 个答案:

答案 0 :(得分:1)

也许一个选择是创建自己的自定义函数,并将其用作predicate函数中的select_if。像这样:

check_cond <- function(x) is.character(x) | is.numeric(x) && sum(x) > 12

tibbly %>% 
  select_if(check_cond)

  y         z
  <chr> <dbl>
1 a         9
2 b         8
3 c         7
4 d         6