我在R中有一个数据框如下
PROBE_ID H_1AVG_Signal H_1Detection Pval H_2AVG_Signal H_2Detection Pval GH_1AVG_Signal GH_1Detection Pval
ILMN_1343291 47631.78 0.00 53022.43 0.00 46567.29 0.00
ILMN_1651229 135.42 0.01 161.59 0.01 162.46 0.04
ILMN_1651260 80.81 0.86 88.05 0.86 92.45 0.89
ILMN_1651279 143.65 0.01 138.96 0.04 113.29 0.47
是否有任何可能的方法来对包含具有检测p值的探针ID的数据进行子集化<使用通用后缀"检测Pval"最终获得如下的子集数据
PROBE_ID H_1AVG_Signal H_1Detection Pval H_2AVG_Signal H_2Detection Pval GH_1AVG_Signal GH_1Detection Pval
ILMN_1343291 47631.78 0.00 53022.43 0.00 46567.29 0.00
ILMN_1651229 135.42 0.01 161.59 0.01 162.46 0.04
我真的很感激如何创建这样一个子集的建议。 谢谢。
答案 0 :(得分:1)
如果你总是知道你将拥有的列名,那么你可以使用dplyr过滤器来获得你想要的结果
library(dplyr)
main.df <- main.df %>%
filter(`H_1Detection Pval` < 0.05 | `H_2Detection Pval` < 0.05 | `GH_1Detection Pval` < 0.05)
如果您不总是知道列名,可以动态获取它们并将它们插入dplyr filter_命令,如下所示
library(dplyr)
# Find any columns that contain "detection" in the column name
det.cols <- colnames(main.df)[which(grepl("detection",tolower(colnames(main.df))))]
# Create a filter string from the column names in the format of
# "`column name` < 0.05 | `column name2` < 0.05"
filt <- gsub(","," | ",toString(paste("`",det.cols,"`"," < 0.05", sep = "")))
# Apply the filter to the dataframe
main.df <- main.df %>%
filter_(filt)
答案 1 :(得分:0)
filter_at
是一种动态检测列的简便方法,如R dplyr filtering data with values greater than +N and lesser than -N : abs() function?
main.df %>% filter_at(vars(contains("Detection Pval")), .vars_predicate = any_vars(. < 0.5))