2

我正在寻找一些帮助来使用R%like%中的运算符创建子集。

我有一个名为“pruebas1”的表,其中包含以下信息:

      scenario_name | land_consumption | land_consumption_pct
Contención al 30%      692.00              11.081468525813
Contención al 50%      221.23               3.542703786613
Contención al 70%       94.98               1.520975451494
Contención al 95%       69.29               1.109583760966

还有更多的行。它们共享一个模式,百分比值“30%”、“50%”

我想为每个百分比值创建一个子集,并尝试使用以下代码来实现:

for (i in 1:33){
  if (prueba1$scenario_name %like% '%30%'){
    esc_30[[i]]<-prueba1$scenario_name[[i]]
  }
} 

结果是一个没有数据的对象。我和一个朋友一起建造了这个,我们对此并不陌生。正如您所看到的,我们首先需要帮助才能正确使用%like%运算符,当然还要创建一个循环来为不同的百分比值创建一个子集。

您可以通过特定链接帮助我们或直接帮助我们提供代码。

4

2 回答 2

2

您可能正在考虑 SQLLIKE运算符,其中x LIKE '%foo%'表示包含'foo'在任何位置的任何值。

data.table 的等效项%like%x %like% ".*foo.*". 这是因为%like%适用于正则表达式。在正则表达式中,字符串.*表示“任何重复 0、1 或多次的字符”。

在 R 中,查看?regexR 如何处理正则表达式。

于 2018-10-12T19:47:46.290 回答
0

如果你想避免使用正则表达式,你应该在 grepl 中使用“fixed”参数。data.table 中的 %like% 是 grepl 的包装器。

因此,您可以尝试以下方法:

esc30<-prueba1$scenario_name[grepl("30%",prueba1$scenario_name,fixed=T)]

如果要获取所有列:

esc30<-prueba1[grepl("30%",prueba1$scenario_name,fixed=T),]

但是,如果您不想在文本中间对包含“30%”的项目进行子集化,您应该学习正则表达式。

于 2018-10-15T13:57:49.850 回答