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

R 如何仅在特定类型的列上使用select(),而不丢失其他类型的列?,r,select,dplyr,R,Select,Dplyr,有一些类似的问题(,),但没有一个与我想要的答案完全相同 问题是: 如何仅在特定类型的列上使用select() select_if()或select_at()中使用的select helper函数只能引用列名或索引。在这种特殊情况下,我希望选择特定类型(数字)的列,然后根据它们的列和选择它们的子集,同时不丢失其他类型(字符)的列 我想做的是: tibbly = tibble(x = c(1,2,3,4), y = c("a", "b","c","d"),

有一些类似的问题(,),但没有一个与我想要的答案完全相同

问题是: 如何仅在特定类型的列上使用select()

select_if()
select_at()
中使用的select helper函数只能引用列名或索引。在这种特殊情况下,我希望选择特定类型(数字)的列,然后根据它们的列和选择它们的子集,同时不丢失其他类型(字符)的列

我想做的是:

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
我只选择了sum>12的列,但我也失去了字符cholumns。我希望避免事后必须重新连接丢失的柱

有没有更好的方法可以根据列的名称/索引以外的某些属性以dplyr方式选择列


谢谢大家!

也许可以选择创建自己的自定义函数,并将其用作
select\u 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
检查第12条
tibbly%>%
选择“如果”(选中“条件”)
y z
1 a 9
2 b 8
3 c 7
4d6

您还可以指出,这仅适用于特定为字符和数字的列。。一些可能是因素,可能看起来是性格,但不会被选中,因为它们基本上不是性格完美,谢谢!我将所有内容都放在select函数中,它完全按照预期工作:tibbly%>%select_if(~is.numeric(.)&&sum(.)>12 | is.character()@onyanbu您是对的,这是针对数字和字符的。然而,我试图避免目前的因素,并感谢TydVules的政策,在没有我同意的情况下,没有意外的因素出现。这是真的,Onyambu,如果需要的话,可以考虑扩展函数,以选择因子,或者用CalSoM>12的整数列。太好了,它适合你,莫乔克!
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