繁体   English   中英

从 R 数据框中的字符串中删除前缀

[英]Removing prefix from strings in R data frame

我有一个数据框wkt_small其中包含以下数据:

id             GEOMETRY                                                                                      
  <chr>          <chr>                                                                                         
1 PTK01        LINESTRING( 1.142 85.892 1.400, 0.991 85.892 1.400)
2 PTK02        LINESTRING( 2.142 85.892 1.400, 0.991 85.892 1.400)
...

我需要的是它看起来像这样:

id             GEOMETRY                                                                                      
  <chr>          <chr>                                                                                         
1 PTK01        ( 1.142 85.892 1.400, 0.991 85.892 1.400)
2 PTK02        ( 2.142 85.892 1.400, 0.991 85.892 1.400)
...

我尝试了以下方法:

wkt_small[, 2] <- gsub('^\\w+', '', wkt_small[, 2])

但是,这为所有行的GEOMETRY提供了以下值:

("LINESTRING( 1.142 85.892 1.400, 0.991 85.892 1.400, 0.991 85.301 1.4)","LINESTRING( 1.142 85.892 1.400, 0.991 85.892 1.400, 0.991 85.301 1.4)"...

将第一行值与我想为数据框中所有条目删除的字符串连接起来。

使用[[…]]$…选择单列,而不是[, …]

wkt_small$GEOMETRY <- sub('^\\w+', '', wkt_small$GEOMETRY)

...实际上,使用适当的data.frame您的代码也可以正常工作; 但是对于 tibble, [索引总是返回 tibble ,而不是列向量。 tibble 语义等同于将[, …, drop = FALSE]与常规data.frame

更新:我们可以使用str_remove (在这种情况下更好):

library(stringr)
wkt_small %>% 
    mutate(GEOMETRY = str_remove(GEOMETRY, '^\\w+'))

我们可以使用stringr包中的str_replace和正则表达式"^[AZ]*"

library(dplyr)
library(stringr)
df %>% 
    mutate(GEOMETRY = str_replace(GEOMETRY, "^[A-Z]*", ""))

输出:

  id    GEOMETRY                                 
  <chr> <chr>                                    
1 PTK01 ( 1.142 85.892 1.400, 0.991 85.892 1.400)
2 PTK02 ( 2.142 85.892 1.400, 0.991 85.892 1.400)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM