【问题标题】:Create subset with %like% operator使用 %like% 运算符创建子集
【发布时间】:2018-10-12 19:13:25
【问题描述】:

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

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

【问题讨论】:

  • 我正在添加 data.table 标记,因为这是我见过 %like% 的唯一地方。如果使用其他内容,请随时恢复编辑并澄清。
  • like 使用传递给grepl 的模式,因此当您使用'%30%' 模式时,百分号是未转义的分隔符。尝试将其更改为'30\\%'like 也是矢量化的,因此第一个元素确定 if 的计算结果是 TRUE 还是 FALSE。也许你想做的是esc_30[prueba1$scenario_name %like% '30\\%'] &lt;- prueba1$scenario_name[prueba1$scenario_name %like% '30\\%']
  • 听起来您只是想要split(pruebas, pruebas$scenario_name),还是您有不同的包含30% 的字符串想要组合在一起?
  • @KerryJackson 我使用了您的代码并创建了一个包含总行数的列表,但只有具有 '30\\%' 的行有数据。相反,我对您的代码 esc_30&lt;- prueba1$scenario_name[prueba1$scenario_name %like% '30\\%'] 进行了修改,这给了我一个列表,其中仅包含包含 '30\\%' 的行-没有空行-。我想要那个,但其余的列

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


【解决方案1】:

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

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

在 R 中,请参阅 ?regex 了解 R 如何处理正则表达式。

【讨论】:

    【解决方案2】:

    如果你想避免使用正则表达式,你应该在 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%”的项目进行子集化,您应该学习正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2017-02-11
      • 2018-12-13
      相关资源
      最近更新 更多