我正在寻找使用 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%
运算符,当然还需要循环以创建不同百分比值的子集。
您可以通过特定链接帮助我们或直接提供代码帮助。
答案 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%”的项目作为子集,则应该学习正则表达式。