我有一个数据文件,其地理坐标以度 - 分 - 秒表示,其结构如下:
mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);
mLayout.setDragView(findViewById(R.id.userInfoRoot));
mLayout.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() {
@Override
public void onPanelSlide(View panel, float slideOffset) {
Log.i(TAG, "onPanelSlide, offset " + slideOffset);
}
@Override
public void onPanelExpanded(View panel) {
Log.i(TAG, "onPanelExpanded");
mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
}
@Override
public void onPanelCollapsed(View panel) {
Log.i(TAG, "onPanelCollapsed");
}
@Override
public void onPanelAnchored(View panel) {
Log.i(TAG, "onPanelAnchored");
}
@Override
public void onPanelHidden(View panel) {
Log.i(TAG, "onPanelHidden");
}
});
我可以通过以下方式将其读入R:
39°47′01″ N,100°26′45″ W
我需要将坐标转换为十进制度数。我正在使用替换将其转换为d <- read.csv("D:/locations.csv", encoding="UTF-8")
head(d)
Location Lat Long
United States 39°47'01<U+2033> N 100°26'45<U+2033> W
Denmark 55°40'13<U+2033> N 10°20'00<U+2033> E
.
.
.
所需的32d14'23" N
格式。我正在使用以下替换,这对于度和秒工作正常,但不适用于分钟部分:
sp::char2dms
我应该如何替换会议记录?我已经尝试在'。
之前使用转义序列更新
根据评论中的要求,这是使用dput的数据样本:
d$Lat %>% sub("°", "d", .) %>% sub("′", "m", .) %>% sub("″","s",.)
[1] "39d47′01s N "35d00′00s N" "55d40′13s N"
答案 0 :(得分:2)
我们可以使用捕获组
在一个sub
中执行此操作
sub("(\\d+).(\\d+).(\\d+).*(\\s+.)", "\\1d\\2m\\3s\\4", v1)
#[1] "54d42m08s N" "1d20m23s S" "64d41m11s N" "39d47m01s N" "4d47m58s S"
#[6] "9d44m08s S" "39d47m01s N" "19d25m57s N" "2d23m33s N" "8d01m48s N"
其中&#39; v1&#39;是d$Lat
。
在这里,我们没有使用%>%
,因为它不需要。
答案 1 :(得分:0)
使用您的示例,您可以尝试以下操作(d$Lat
应该data.frame
):
d %>% sub("°", "d", .) %>% sub("'", "m", .) %>% sub("<U\\+2033>","s",.)
[1] "54d42m08s N" "1d20m23s S" "64d41m11s N" "39d47m01s N" "4d47m58s S"
[6] "9d44m08s S" "39d47m01s N" "19d25m57s N" "2d23m33s N" "8d01m48s N"
但我认为可能有一种更聪明的方法(没有*sub
来在坐标系之间进行转换。)