Regex 带括号的行名:R中是否允许它们?
我正在尝试使用工作和测试集的名称对数据进行子集划分Regex 带括号的行名:R中是否允许它们?,regex,r,names,Regex,R,Names,我正在尝试使用工作和测试集的名称对数据进行子集划分 ws_data <- subset(data, grepl(paste0("v*[0-9]_",ws_names, collapse="|" ), rownames(data))==TRUE) 只是跳过了。 括号是否允许作为R中的法定名称?如何解决不更改行名称的问题? 提前谢谢 数据示例 64 | v0064 |(氯)(三氟)甲烷|-51.5 | 510.9 | 104.5 | 11.2 | 65 | v0067
ws_data <- subset(data, grepl(paste0("v*[0-9]_",ws_names, collapse="|" ),
rownames(data))==TRUE)
只是跳过了。
括号是否允许作为R中的法定名称?如何解决不更改行名称的问题?
提前谢谢
数据示例
64 | v0064 |(氯)(三氟)甲烷|-51.5 | 510.9 | 104.5 | 11.2 |65 | v0067 |(二氯)二氟甲烷|-81.0 | 233.0 | 121.0 | 16.1 | 正则表达式 行名称(ts)[1]
[1] “溴三氟甲烷” 行名称(数据)[1]
[1] “v0001_溴三氟甲烷” grepl(“v[0-9]*_溴三氟甲烷”,行名(数据)[1])
[1] 真的 grepl(“v*[0-9]_溴三氟甲烷”,行名(数据)[1])
[1] 真的
通常,您可以在名称和行名中使用类似的字符,使用时只需引用它们。我认为这里的问题是
subset
函数,它允许一些不寻常的方法来指定子集,这使得一些事情更容易,但另一些事情更难。它试图弄清楚您所说的行名是什么意思(而不仅仅是把它们当作文字字符串),括号可能会混淆这个过程
尝试以下方法:
data[ grepl( paste0("v*[0-9]_",ws_names, collapse="|" ), rownames(data)), ]
如果可以构造名称列表,您还可以使用%中的%来简化此操作
另请参见《财富》(69)
,==TRUE是多余的,比添加0或乘以1稍微有用。通常,您可以在名称和行名中使用类似的字符,使用时只需引用它们。我认为这里的问题是subset
函数,它允许一些不寻常的方法来指定子集,这使得一些事情更容易,但另一些事情更难。它试图弄清楚您所说的行名是什么意思(而不仅仅是把它们当作文字字符串),括号可能会混淆这个过程
尝试以下方法:
data[ grepl( paste0("v*[0-9]_",ws_names, collapse="|" ), rownames(data)), ]
如果可以构造名称列表,您还可以使用%中的%来简化此操作
另请参见《财富》(69)
,==TRUE是多余的,比加0或乘1稍微有用一些。我猜您面临的问题是,括号在正则表达式中有意义。有一种治疗方法,你可以用它来做这样的事情:
quotemeta <- function(x) gsub("([^A-Za-z_0-9])", "\\\\\\1", x)
data[grepl(paste0("^v[0-9]*_", quotemeta(ws_names), collapse="|"), rownames(data)), ]
quotemeta我猜您面临的问题是,括号在正则表达式中有意义。有一种治疗方法,你可以用它来做这样的事情:
quotemeta <- function(x) gsub("([^A-Za-z_0-9])", "\\\\\\1", x)
data[grepl(paste0("^v[0-9]*_", quotemeta(ws_names), collapse="|"), rownames(data)), ]
quotemeta您可以发布显示问题的数据子集吗?数据框相当大,但我添加了一个简短的示例wait,那么开始的列“v0064(氯)(三氟)甲烷”是实际的数据列还是数据集的行名?看起来您的行名是数字,在本例中是64和65。不,它们是行名。我认为,这只是RStudio在视图窗口中描述数据的方式。如果有必要,我将修复该示例。您的模式要求匹配0个或多个“v”,后跟一个数字,后跟下划线“”,后跟ws_name元素。该模式与示例数据中的任何内容都不匹配。我想你可能想要“[0-9]”之后的“*”,即“v[0-9]*”,而不是你现在拥有的。你能发布一个显示问题的数据子集吗?数据框相当大,但我添加了一个简短的示例Wait,那么开始的列“v0064(氯)(三氟)甲烷”
是实际的数据列,还是数据集的行名?看起来您的行名是数字,在本例中是64和65。不,它们是行名。我认为,这只是RStudio在视图窗口中描述数据的方式。如果有必要,我将修复该示例。您的模式要求匹配0个或多个“v”,后跟一个数字,后跟下划线“”,后跟ws_name元素。该模式与示例数据中的任何内容都不匹配。我想您可能需要“[0-9]”之后的“*”,即“v[0-9]*”而不是您现在拥有的。谢谢您的帮助,但它似乎给出了与以前代码相同的结果。还有,我想问一下什么是财富(69)?@Boddha,财富套餐包含了R社区收集的智慧和智慧。如果安装并加载软件包,然后运行fortune(69)
它将打印特定的fortune,运行fortune()
将选择一个随机的fortune。时不时地阅读一些随机的财富可以是一种娱乐和/或教育。哦,太棒了!我一定会尝试的。谢谢你的帮助,但它似乎给出了与前面代码相同的结果。还有,我想问一下什么是财富(69)?@Boddha,财富套餐包含了R社区收集的智慧和智慧。如果安装并加载软件包,然后运行fortune(69)
它将打印特定的fortune,运行fortune()
将选择一个随机的fortune。时不时地阅读一些随机的财富可以是一种娱乐和/或教育。哦,太棒了!我一定要试试。太好了,谢谢!我在想类似的事情,但它更整洁。太好了,谢谢!我在想类似的事情,但要整洁得多。