r:只在某些模式之间保留数据

r:只在某些模式之间保留数据,r,R,我有一个数据框,其中包含了我不需要的大量数据的行 我只想保留介于{type:..…]]]之间的数据 下面是我的一行数据的示例 在下一行中,我有两次出现在{type:…]]之间的数据, 因此理想情况下,之后我会有{type:polygon:..6941736.81823727]]{type:polygon:..6941544.53133806]] 我的一行数据如下所示: structure(list(Id = "55", Area = "[{type:polygon,

我有一个数据框,其中包含了我不需要的大量数据的行

我只想保留介于{type:..…]]]之间的数据

下面是我的一行数据的示例

在下一行中,我有两次出现在{type:…]]之间的数据, 因此理想情况下,之后我会有{type:polygon:..6941736.81823727]]{type:polygon:..6941544.53133806]]

我的一行数据如下所示:

structure(list(Id = "55", Area = "[{type:polygon,rings: 
[[[113387.82961770154,6941736.81823727],[113090.44180455463,6941640.077623354], 
[112992.50686207252,6941667.547180392],[112993.70119063937,6941778.61973711], 
[113088.05314742093,6941772.648094275],[113082.08150458665,6941843.1134797195], 
[113373.49767489928,6941840.724822586],[113373.49767489928,6941841.919151153],[113387.82961770154,6941736.81823727]]],_ring:0,spatialReference:{wkid:102100,latestWkid:3857},cache:{_extent:{xmin:112992.50686207252,ymin:6941640.077623354,xmax:113387.82961770154,ymax:6941843.1134797195,spatialReference:{wkid:102100,latestWkid:3857}},_partwise:null}},{type:polygon,rings:[[[113386.63528913469,6941544.531338006],[113316.16990369024,6941530.199395204],[113313.78124655654,6941568.417909343],[113381.85797486728,6941575.583880744],[113386.63528913469,6941544.531338006]]],_ring:0,spatialReference:{wkid:102100,latestWkid:3857,_geVersion:{fo:,mi:102100,Sl:null}}"), row.names = 2L, class = "data.frame")

使用
stri\u extract
stringi
中提取类似内容如何:

dat <- structure(list(Id = "55", Area = "[{type:polygon,rings: [[[113387.82961770154,6941736.81823727],[113090.44180455463,6941640.077623354], [112992.50686207252,6941667.547180392],[112993.70119063937,6941778.61973711], [113088.05314742093,6941772.648094275],[113082.08150458665,6941843.1134797195], [113373.49767489928,6941840.724822586],[113373.49767489928,6941841.919151153],[113387.82961770154,6941736.81823727]]],_ring:0,spatialReference:{wkid:102100,latestWkid:3857},cache:{_extent:{xmin:112992.50686207252,ymin:6941640.077623354,xmax:113387.82961770154,ymax:6941843.1134797195,spatialReference:{wkid:102100,latestWkid:3857}},_partwise:null}},{type:polygon,rings:[[[113386.63528913469,6941544.531338006],[113316.16990369024,6941530.199395204],[113313.78124655654,6941568.417909343],[113381.85797486728,6941575.583880744],[113386.63528913469,6941544.531338006]]],_ring:0,spatialReference:{wkid:102100,latestWkid:3857,_geVersion:{fo:,mi:102100,Sl:null}}"), row.names = 2L, class = "data.frame")
library(stringi)
dat <- dat %>% 
  mutate(area = stri_extract_all(Area, regex="\\{type:.*?]]]")) %>% 
  unnest(area) %>% 
  select(-Area)
dat
# # A tibble: 2 x 2
#   Id    area                                                                                                 
#   <chr> <chr>                                                                                                
# 1 55    {type:polygon,rings: [[[113387.82961770154,6941736.81823727],[113090.44180455463,6941640.077623354],…
# 2 55    {type:polygon,rings:[[[113386.63528913469,6941544.531338006],[113316.16990369024,6941530.199395204],…
dat%
unnest(面积)%%>%
选择(-区域)
dat
##tibble:2x2
#Id区
#                                                                                                    
#155{类型:多边形,环:[[113387.829617701546941736.81823727],[113090.441804554636941640.077623354],…
#2 55{类型:多边形,环:[[113386.635289134696941544.531338006],[113316.169903690246941530.199395204],…

但我还需要它来保持第二次出现在{type:和]]]之间的数据。实际上,这使得第二次出现在{type:和]]之间的数据]]但没有保留第一行。我更新了答案。其中有新行字符,因此正则表达式找不到第一个实例。假设您将有一个包含新行字符的连续字符串,这应该会起作用。如果您确实有新行字符,请将其放在当前字符串之前的变体中e:
Area=str\u replace\u all(区域,\\n,“”),