如何使用dplyr从R中的数据框中删除所有整数列?

时间:2018-10-06 18:32:21

标签: r dplyr

我想使用dplyr从数据框中删除所有整数列,仅保留非整数数字列。我以为我可以做到以下几点:

注意:我意识到我可以在下面的示例中选择数字,但是我的实际数据集除了数字和整数外还具有其他变量类型。

library(dplyr)
mydata <- USArrests

mydata2 <- mydata %>% 
  select(!is.integer)

但是会出现错误:

  

!is.integer错误:参数类型无效

mydata2 <- mydata %>% 
  select(-is.integer)

错误提示:

  

-x错误:一元运算符的参数无效

以下作品有效,但我也想知道如何在dplyr中做到这一点。

mydata_temp <- mydata[, sapply(mydata, function(x) !is.integer(x))]
mydata_numeric_vars <- mydata_temp %>% 
  select_if(is.numeric)

有什么建议吗?似乎在dplyr中应该很简单,但是在堆栈中查找时,似乎无法找到类似的问题?

2 个答案:

答案 0 :(得分:3)

可能的解决方法:

mydata %>% 
  .[ , !sapply(., is.integer)]

答案 1 :(得分:2)

使用select_if

out <- mydata %>%
           select_if(Negate(is.integer))
str(out)
#'data.frame':  50 obs. of  2 variables:
# $ Murder: num  13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
# $ Rape  : num  21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...

如果我们要选择不止一种类型,请使用

mydata %>% 
   select_if(~ !(is.integer(.x)) | is.numeric(.x))