【问题标题】:Function to be used for keeping the last column用于保留最后一列的函数
【发布时间】:2021-02-17 11:42:33
【问题描述】:

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

dataframe

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

categorical variable column is removed

【问题讨论】:

  • 您能否展示一下预期的输出应该是什么样子?
  • 输出应仅包含包含 SD>0.1 的列,最后一列应包含第一张图片中的分类变量。
  • 我们无法从图像中复制数据。以更易于复制的可复制格式添加它们。阅读how to give a reproducible example。
  • 非常感谢您告诉我更好的沟通方式,非常感谢:)

标签: r function dataframe dplyr


【解决方案1】:

以下内容对您有用吗?

library(tidyverse)

select_if(df, function(col) is.character(col) | (is.numeric(col) && sd(col) > 1))

【讨论】:

  • 为列名;有 882 列,如何用更简单的代码应用到所有列?
  • 欢迎投票/将答案标记为已接受。
【解决方案2】:

随着dplyr的新版本,我们可以使用select和where

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多