【发布时间】: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\\%'] <- prueba1$scenario_name[prueba1$scenario_name %like% '30\\%'] -
听起来您只是想要
split(pruebas, pruebas$scenario_name),还是您有不同的包含30%的字符串想要组合在一起? -
@KerryJackson 我使用了您的代码并创建了一个包含总行数的列表,但只有具有 '30\\%' 的行有数据。相反,我对您的代码
esc_30<- prueba1$scenario_name[prueba1$scenario_name %like% '30\\%']进行了修改,这给了我一个列表,其中仅包含包含 '30\\%' 的行-没有空行-。我想要那个,但其余的列
标签: r regex for-loop data.table rlike