基于列名的特定值的dplyr筛选器

基于列名的特定值的dplyr筛选器,r,dplyr,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 thoug

如何基于特定列筛选数据帧。 所以我想找到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"))
#温度数据
df%
选择(-contains(“Test”))
请注意,真正的数据集大约有40列和30k行,我们可以试试看

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

重塑也会奏效

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)

dplyr方式给出:extract_u2;.data.frame(data,col,into,regex=regex,remove=remove,:缺少参数“into”,没有default@KillerSnail请检查是否已加载
库(tidyr)
。在这种情况下,请使用
$ind%>%magrittr::extract(df,,)
我只是使用了第一条没有dplyr的语句。是的,我加载了tidyr。