我有一个大数据框,其中有5行,但约有10万列。我想保留一列中所有值都匹配的列。
这是数据框的示例
> df
Mouse JAX00000010 JAX00000010r UNCHS000003 JAX00240606 JAX00240613 JAX00240636 UNCHS000005
1 407 BF BF BF BF BF BF BF
2 410 BH BH BH BH BH BH BH
3 426 BD BD BD BD BD BD BD
4 447 BC BC BC BC BC BC BC
5 87 BF BF BF BF BF BF BF
我想保留所有具有相同值的列,例如'BB'。尽管我确定这很简单,但是我还没有遇到执行此操作的函数。感谢您的帮助!
答案 0 :(得分:2)
尝试
df[, sapply(df, function(x) length(unique(x)) == 1]
或使用Filter
Filter(function(x) length(unique(x)) == 1, df)
答案 1 :(得分:2)
一种purrr
方法:
library(purrr)
df %>% keep(~ length(unique(.x)) == 1)
N.B。 -您可以使用discard
:df %>% discard(~ length(unique(.x)) == 1)
来将其反转。
答案 2 :(得分:1)
在基数R中:
# Your data
df <- read.table(header = TRUE, text = "
Mouse JAX00000010 JAX00000010r UNCHS000003 JAX00240606 JAX00240613 JAX00240636 UNCHS000005
1 407 BF BF BF BF BB BF BF
2 410 BH BH BH BH BB BH BH
3 426 BD BD BD BD BB BD BD
4 447 BC BC BC BC BB BC BC
5 87 BF BF BF BF BB BF BF")
# Get cols
get.cols <- which(apply(df[,-1] == "BB", 2, all))
df[,c(1, get.cols + 1)]
# Mouse JAX00240613
#1 407 BB
#2 410 BB
#3 426 BB
#4 447 BB
#5 87 BB
编辑,糟糕,我把这个问题误认为是特定的搜索字符串。如果不是这种情况,并且您正在寻找仅包含一个值的列,则可以进行以下操作:
get.cols <- which(apply(df, 2, function(x) length(unique(x)) == 1))
df[, c(1, get.cols)]
# Mouse JAX00240613
#1 407 BB
#2 410 BB
#3 426 BB
#4 447 BB
#5 87 BB
假设您也要输出第一列。如果没有,那么您当然可以简化一下。