在字符串列中,删除第一个逗号(分隔符)

时间:2018-04-14 23:05:30

标签: r regex string dataframe gsub

这必须是一个简单的子或gsub,但我似乎无法在soverflow上找到它。可能在某个地方重复,但在某些地方我似乎找不到。

数据

df <- data.frame(c1=c(1:4),c2=c("431, Dallas, TX", "c63728 , Denver, CO", ",New Orleans, LA", "somewhere,NY, NY"))

所需数据

df.desired <- data.frame(c1=c(1:4),c2=c("Dallas, TX", "Denver, CO", "New Orleans, LA", "NY, NY"))

pasqui根据我的要求编辑了下面的答案,但我稍微修改了这个问题

我只想删除第一个字符串和逗号。所以我希望它也可以在下面工作:

数据

df <- data.frame(c1=c(1:4),c2=c("431, Dallas, TX, 75225", "c63728 , Denver, CO, 80121", ",New Orleans, LA", "somewhere,NY, NY"))

所需数据

df.desired <- data.frame(c1=c(1:4),c2=c("Dallas, TX, 75225", "Denver, CO, 80121", "New Orleans, LA", "NY, NY"))

3 个答案:

答案 0 :(得分:2)

foreach($ReviewIDs as $ReviewID) {

注意:这是一个基于&#34;捕获群体的解决方案&#34;:它们在认知经济方面(对于人类而言)是好的。这是更有效的机器选择。

编辑:

调整正则表达式以应对这两种情况

我一直在玩Regex Capturing groups

鉴于第二个data.frame:

library(dplyr)

df %>% 
    mutate(c2 = gsub("(^.*,\\s{0,1})(.*,.*$)", "\\2", c2))

#Output
  c1              c2
1  1      Dallas, TX
2  2      Denver, CO
3  3 New Orleans, LA
4  4          NY, NY

我们申请:

df <- data.frame(c1=c(1:4),c2=c("431, Dallas, TX, 75225", "c63728 , Denver, CO, 80121", ",New Orleans, LA", "somewhere,NY, NY"))

输出是:

df %>% 
    mutate(c2 = gsub("(^.*,{1}?)(.*,.*$)", "\\2", c2))

它适用于你的第一个例子

答案 1 :(得分:1)

使用基础R,您可以使用:

df$desired  <- trimws(gsub(pattern='^.*?,', replacement = '', df$c2), which='left')

或者使用tidyverse:

library(dplyr)
library(stringr)

df %>% 
  mutate(desired = 
           str_replace(c2, pattern = '^.*?,', replacement = ""),
         desired = str_trim(desired, side='left')) -> df

'^。*?,'表达式查找字符串开头的任何值,直到第一个逗号。的?在堆栈溢出时根据此答案搜索逗号时使表达式非贪婪:

Regular expression to stop at first match

答案 2 :(得分:0)

您可以使用str_split,删除每个向量的第一个条目,然后将它们全部粘贴在一起

df %>% 
  mutate(c2 = c2 %>% str_split(",") %>%
           lapply(function(x){
             x[-1] %>% 
               str_trim() %>% 
               str_c(collapse = ", ")
           }))