我想使用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中应该很简单,但是在堆栈中查找时,似乎无法找到类似的问题?
答案 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))