[英]Is there an R function to filter a dataframe in which columns with all matching values are kept?
我有一個大數據框,其中有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'。 盡管我確定這很簡單,但是我還沒有遇到執行此操作的函數。 謝謝你的幫助!
嘗試
df[, sapply(df, function(x) length(unique(x)) == 1]
或使用Filter
Filter(function(x) length(unique(x)) == 1, df)
purrr
方法:
library(purrr)
df %>% keep(~ length(unique(.x)) == 1)
注意-您可以使用以下命令discard
反轉: df %>% discard(~ length(unique(.x)) == 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
假設您也要輸出第一列。 如果沒有,那么您當然可以簡化一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.