这必须是一个简单的子或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"))
答案 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
'^。*?,'表达式查找字符串开头的任何值,直到第一个逗号。的?在堆栈溢出时根据此答案搜索逗号时使表达式非贪婪:
答案 2 :(得分:0)
您可以使用str_split
,删除每个向量的第一个条目,然后将它们全部粘贴在一起
df %>%
mutate(c2 = c2 %>% str_split(",") %>%
lapply(function(x){
x[-1] %>%
str_trim() %>%
str_c(collapse = ", ")
}))