dplyr根据列名筛选特定值

时间:2015-12-08 04:24:24

标签: r dplyr

如何根据某些列过滤数据框。 所以我想在他们的colname中找到带有'Test'的列 然后过滤它们,以便我只保留那些具有特定值的那些。

# Temp Data
df <- as.data.frame(matrix(seq(1:40),ncol=10,nrow=40))
colnames(df) <- c("V1", "V2", "V3 - Test", "V4 - Test", "V5", "V6", "V7", "V8", "V9 - Test", "V10")

# What I thought would work
library(dplyr)

df %>%
  filter(grepl("Test", colnames(df) ) == 40 ) %>%
  select(-contains("Test"))

请注意,真实数据集有大约40列和30k行。

2 个答案:

答案 0 :(得分:2)

重塑也会有效。

library(dplyr)
library(tidyr)

df_ID = df %>% mutate(ID = 1:n())

df_ID %>%
  select(contains("Test"), ID) %>%
  gather(variable, value, -ID) %>%
  filter(value == 40) %>%
  semi_join(df_ID)

答案 1 :(得分:1)

我们可以尝试

df[!rowSums(df[grepl("Test", names(df))]!=40),]

或使用dplyr

library(dplyr)
library(magrittr)
df %>%
   mutate(ind =!rowSums(.[grep('Test', names(.))]!=40)) %>%
   .$ind %>% 
   extract(df, .,)
#    V1 V2 V3 - Test V4 - Test V5 V6 V7 V8 V9 - Test V10
# 40 40 40        40        40 40 40 40 40        40  40