繁体   English   中英

如果列中的所有值都相同,则从数据框中删除该列

[英]Remove column from data frame if all values in the column are identical

如果列具有相同的值,从数据框中删除列的最有效方法是什么?

这是一个示例df,但是我的df超过10 ^ 8列,因此我正在寻找最有效的方法:

df <- data.frame(c(0, 0, 0, 0, 1), c(0, 0, 0, 0, 0), c(1, 1, 1, 0, 1), c(1, 1, 1, 1, 1))

在此示例中,应删除列2和4。

谢谢!

一种基于diff的解决方案可能是:

df[,apply(df,2,function(x)!all(diff(x)==0))]

#    c.0..0..0..0..1. c.1..1..1..0..1.
# 1                0                1
# 2                0                1
# 3                0                1
# 4                0                0
# 5                1                1

一个plyr解决方案:

library(plyr)
df <- df[,colwise(function(x) length(unique(x)))(df)>1]

我们可以将包中的select_if函数与用户定义的函数一起使用,以检查每列中的唯一值是否为两个或多个。

library(dplyr)

# Define a function to check if two or more values in a vector
not_unique <- function(vec) length(unique(vec)) > 1

# Use select_if to select the column
df2 <- df %>% select_if(not_unique)

df2
#   c.0..0..0..0..1. c.1..1..1..0..1.
# 1                0                1
# 2                0                1
# 3                0                1
# 4                0                0
# 5                1                1

我们也可以从基数R中使用sapply

df[, sapply(df, not_unique)]
#   c.0..0..0..0..1. c.1..1..1..0..1.
# 1                0                1
# 2                0                1
# 3                0                1
# 4                0                0
# 5                1                1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM