是否有方法从data.frame中具有相似后缀的不同列中选择行?
我在R中有一个数据帧,如下所示是否有方法从data.frame中具有相似后缀的不同列中选择行?,r,R,我在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
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
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
是否有任何可能的方法使用公共后缀detection Pval对所有样本的包含探测p值<0.05的探针ID的数据进行子集划分,以最终获得如下子集数据
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
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
我真的很感激关于如何创建这样一个子集的建议。
谢谢。如果您总是知道您将拥有的列名,那么您可以使用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_uu命令中,如下所示
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)
filter_at是对列进行动态检测的一种更简单的方法,如中所述
main.df%>%filter\u atvarscontainsDetection Pval,.vars\u predicate=any\u vars.<0.5欢迎来到StackOverflow!请阅读相关信息以及如何给出建议。这将使其他人更容易帮助您。您可能需要类似以下内容:df[rowSumsdf[,grepl'Detection Pval',namedf,fixed=TRUE]<0.05>0,]@Jaap,谢谢。我编辑了我的问题,希望现在更好。我尝试了代码,但matrixunlistvalue中出现错误,recursive=FALSE,use.names=FALSE,nrow=nr,:“data”必须是向量类型,是“NULL”您的数据帧的classname\u返回什么?@Jaap it返回数据。frameThank。parsetext=x中出现错误:尝试对将筛选器应用于DataFrame的最后一个代码使用零长度变量名确保替换det.cols中main.df的两个实例我确实用数据名替换了main.df。我只得到了上一个代码的错误。我猜它没有得到列名称中包含检测的列的任何匹配项,这将为det.cols创建一个空向量。由于det.cols为空,因此导致错误出现在最后一行。请注意,此代码将列名与所有小写字母进行比较,因此请确保将det.cols行中的grepl模式保留为所有小写字母,否则它将不会返回任何值。我尝试将标题更改为小写,但它返回的筛选数据没有错误消息。但现在过滤的数据中含有ILMN_1651279基因,第三个样本的检测pval>0.05。