如何根据某些列过滤数据框。 所以我想在他们的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行。
答案 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