基于行名称中的共享字符在R中进行子集设置

基于行名称中的共享字符在R中进行子集设置,r,subset,R,Subset,这是一个基本上原始的问题,但我似乎无法理解: 我有一个SNP列表,在R中有一个对应的cos和Pvalue,作为一个称为SNP的数据帧: 然而,如果该位置没有SNP名称,则一些RS被命名为no_rs1、no_rs2 我只想将名称中带有rs的部分以及相应的cos和Pvalue过滤到snps2数据帧中,从而去掉没有rs的部分,但是为了我的爱,我似乎无法正确使用语法: snps2<-subset(snps, RS=="rs$") snps2<-subset(snps, RS=="rs*")

这是一个基本上原始的问题,但我似乎无法理解:

我有一个SNP列表,在R中有一个对应的cos和Pvalue,作为一个称为SNP的数据帧:

然而,如果该位置没有SNP名称,则一些RS被命名为no_rs1、no_rs2

我只想将名称中带有rs的部分以及相应的cos和Pvalue过滤到snps2数据帧中,从而去掉没有rs的部分,但是为了我的爱,我似乎无法正确使用语法:

snps2<-subset(snps, RS=="rs$")

snps2<-subset(snps, RS=="rs*")
这没用

我通常使用数值限制来处理子集,即

snps2<-subset(snps, Pval<0.05)
这正是我需要它做的-只给我那些Pval低于0.05的行,但我不能得到正确的rs过滤

任何帮助都将不胜感激

尝试以下操作:

df[grepl("^rs", df$RS),]
请尝试以下操作:

df[grepl("^rs", df$RS),]

我想你需要用的是grepl。诀窍是子集或[运算符都与逻辑向量一起工作。子集环境只是使引用data.frame的列更容易,从那里创建正确长度的逻辑向量的任何操作都将起作用

snps <- structure(list(RS = c("rs31192577", "rs32166183", "rs30543887", 
"no_rs6365082", "rs46229295", "no_rs45964436"), cos = c(-0.15583497, 
-0.12573989, -0.07852091, 0.55173702, -0.10897376, NaN), Pval = c(0.2241433, 
0.2934898, 0.5141007, 0.1736945, 0.3687622, 1)), .Names = c("RS", 
"cos", "Pval"), row.names = c(NA, -6L), class = "data.frame")
无论使用[运算符还是子集,子集都可以使用grepl:


我认为您需要使用的是grepl。诀窍是subset或[运算符都使用逻辑向量。subset环境只是使引用data.frame的列变得更容易,从那里创建正确长度的逻辑向量的任何操作都将起作用

snps <- structure(list(RS = c("rs31192577", "rs32166183", "rs30543887", 
"no_rs6365082", "rs46229295", "no_rs45964436"), cos = c(-0.15583497, 
-0.12573989, -0.07852091, 0.55173702, -0.10897376, NaN), Pval = c(0.2241433, 
0.2934898, 0.5141007, 0.1736945, 0.3687622, 1)), .Names = c("RS", 
"cos", "Pval"), row.names = c(NA, -6L), class = "data.frame")
无论使用[运算符还是子集,子集都可以使用grepl:

比较运算符==逐字将snps$RS变量与指定的字符串进行比较,并且不使用特殊字符。您可以使用正则表达式来解决使用grepl函数时出现的问题。以下操作应有效:

snps2 <- snps[grepl("^rs", snps$RS), ]
比较运算符==逐字将snps$RS变量与指定的字符串进行比较,并且不使用特殊字符。您可以使用正则表达式来解决使用grepl函数时出现的问题。以下操作应有效:

snps2 <- snps[grepl("^rs", snps$RS), ]
snps2 <- subset(snps, grepl("^rs",snps$RS))