有一些类似的问题(like here,or 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方式选择列?
谢谢!
答案 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