簡體   English   中英

是否有R函數來過濾保留所有匹配值的列的數據框?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM