使用%like%运算符创建子集

时间:2018-10-12 19:13:25

标签: r regex for-loop data.table rlike

我正在寻找使用 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%运算符,当然还需要循环以创建不同百分比值的子集。

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

2 个答案:

答案 0 :(得分:2)

您可能会想到SQL LIKE运算符,其中x LIKE '%foo%'表示在任何位置包含'foo'的任何值。

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

在R中,有关R如何处理正则表达式的信息,请参见?regex

答案 1 :(得分:0)

如果要避免使用regexp,则应在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%”的项目作为子集,则应该学习正则表达式。