【发布时间】:2016-08-14 17:13:00
【问题描述】:
我知道关于正则表达式的堆栈溢出有很多问题,但我无法通过我所看到的可用帮助完成这项简单的任务。这是我的数据:
a<-c("Los Angeles, CA","New York, NY", "San Jose, CA")
b<-c("c(34.0522, 118.2437)","c(40.7128, 74.0059)","c(37.3382, 121.8863)")
df<-data.frame(a,b)
df
a b
1 Los Angeles, CA c(34.0522, 118.2437)
2 New York, NY c(40.7128, 74.0059)
3 San Jose, CA c(37.3382, 121.8863)
我想删除除数字和句点之外的所有内容(即删除“c”、“)”和“(”。这是我迄今为止尝试过的:
str_replace(df$b,"[^0-9.]","" )
[1] "(34.0522, 118.2437)" "(40.7128, 74.0059)" "(37.3382, 121.8863)"
str_replace(df$b,"[^\\d\\)]+","" )
[1] "34.0522, 118.2437)" "40.7128, 74.0059)" "37.3382, 121.8863)"
不确定还有什么可以尝试的。我想得到以下结果:
[1] "34.0522, 118.2437" "40.7128, 74.0059" "37.3382, 121.8863"
谢谢。
【问题讨论】:
-
为什么你有R代码作为文本?这看起来像一个 XY 问题。
-
我认为将它作为列表而不是再次存储为字符串可能会更好。即
lapply(str_extract_all(df$b, "[0-9.]+"), as.numeric) -
不知道为什么代码是这样的,我写了一个批量地理编码的函数,由于某种原因它偶尔会吐出一个我转置的数据帧,转置函数会创建这个奇怪的“r代码作为文本”问题。更奇怪的是,它并没有对所有数据集都这样做。我将一个数据帧分成两半,并在 1 上运行批处理地理编码,在另一个上运行批处理地理编码,原始数据集的前半部分转置很好,但后半部分创建了这个奇怪的特征。我已经问了将近六个人这个问题,没有人能弄清楚。
-
@akrun 我的最终产品需要是一个包含三列的数据框,城市名称,然后是两列——一列代表纬度,一列代表经度。我希望在堆栈溢出的优秀人员的帮助下,我可以克服剥离不必要字符的第一个障碍,然后我将在两个坐标之间的空间将列分成两部分。
-
@CyrusMohammadian 如果你需要它作为两列
cbind(df[1], do.call(rbind, lapply(str_extract_all(df$b, "[0-9.]+"), as.numeric)))