如果数据框具有所有相同的值,那么从数据框中删除列的最有效方法是什么?
这是一个示例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列。
谢谢!
答案 0 :(得分:2)
基于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
答案 1 :(得分:0)
plyr
解决方案:
library(plyr)
df <- df[,colwise(function(x) length(unique(x)))(df)>1]
答案 2 :(得分:0)
我们可以使用dplyr包中的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