首页 > 解决方案 > 用于保留最后一列的函数

问题描述

当我使用时;data = Filter(function(x) sd(x) > 0.1, df) 我丢失了分类变量(最后一列),因此我必须 cbind.data.frame() 在过滤数据后取回分类变量。有没有办法编写函数来过滤那些 SD>0.1 的数值变量并仍然保留分类变量?

数据框

原始数据包含分类变量(上图)。之后,我使用 --data = Filter(function(x) sd(x) > 0.1, df) 删除了 SD = 0 的列 - 删除了分类变量列(下图)。我只想删除 SD=0 的列,但我不知道如何正确地包裹在函数 () 中。

分类变量列被删除

标签: rfunctiondataframedplyr

解决方案


使用新版本的dplyr,我们可以使用selectwithwhere

library(dplyr)
df %>%
    select(where(~ is.character(.)| (is.numeric(.) && sd(.) > 1)))

iris具有数据集的可重现示例

data(iris)
iris %>% 
   select(where(~ is.character(.)| (is.numeric(.) && sd(.) > 1))) %>% 
   head
#  Petal.Length
#1          1.4
#2          1.4
#3          1.3
#4          1.5
#5          1.4
#6          1.7

推荐阅读