我收到了要分析的数据集,第一行是:
day;lang;nil;longitude;latitude
0;it;5;918.926.528;4.545.545.373
0;ar;28;92.235.078;4.545.206.021
0;es;65;91.225.254;45.497.917
0;it;21;921.481.788;4.547.046.575
0;it;50;915.995;45.450.124
0;ar;28;922.355.903;4.545.202.558
0;ar;28;922.362.504;454.523.043
0;ar;28;922.318.987;4.545.211.746
问题如下:经度和纬度的列格式不是很好,因为我知道这些数据取自何处,经度应该是" 9,..."和纬度应该是" 45,...."
正如您所看到的,每个经度和纬度记录中的位数也不同!
有关如何解决此问题的想法(可能在 R 中)?
答案 0 :(得分:3)
如果你对这些数据感到“困惑”,那么这可能会有所帮助:
library(dplyr)
df <- read.table(text="day;lang;nil;longitude;latitude
0;it;5;918.926.528;4.545.545.373
0;ar;28;92.235.078;4.545.206.021
0;es;65;91.225.254;45.497.917
0;it;21;921.481.788;4.547.046.575
0;it;50;915.995;45.450.124
0;ar;28;922.355.903;4.545.202.558
0;ar;28;922.362.504;454.523.043
0;ar;28;922.318.987;4.545.211.746",
header=TRUE, sep=";", stringsAsFactors=FALSE)
cleanup <- function(x, n) {
x <- gsub("\\.", "", x)
x <- sub(sprintf("^%s", n), sprintf("%s\\.", n), x)
as.numeric(x)
}
df %>%
mutate(longitude=cleanup(longitude, 9),
latitude=cleanup(latitude, 45))
## day lang nil longitude latitude
## 1 0 it 5 9.189265 45.45545
## 2 0 ar 28 9.223508 45.45206
## 3 0 es 65 9.122525 45.49792
## 4 0 it 21 9.214818 45.47047
## 5 0 it 50 9.159950 45.45012
## 6 0 ar 28 9.223559 45.45203
## 7 0 ar 28 9.223625 45.45230
## 8 0 ar 28 9.223190 45.45212
答案 1 :(得分:0)
使用base
R:
sep <- "."
# remove dots from latitude and longitude
dt$latitude <- gsub("\\.","",dt$latitude)
dt$longitude <- gsub("\\.","",dt$longitude)
# insert your sep at your desired position
dt$longitude <- as.numeric(paste0(substring(dt$longitude,1,1), sep, substring(dt$longitude,2)))
dt$latitude <- as.numeric(paste0(substring(dt$latitude,1,2), sep, substring(dt$latitude,3)))
# day lang nil longitude latitude
# 1 0 it 5 9.189265 45.45545
# 2 0 ar 28 9.223508 45.45206
# 3 0 es 65 9.122525 45.49792
# 4 0 it 21 9.214818 45.47047
# 5 0 it 50 9.159950 45.45012
# 6 0 ar 28 9.223559 45.45203
# 7 0 ar 28 9.223625 45.45230
# 8 0 ar 28 9.223190 45.45212
数据强>
dt <- read.table(text = "day;lang;nil;longitude;latitude
0;it;5;918.926.528;4.545.545.373
0;ar;28;92.235.078;4.545.206.021
0;es;65;91.225.254;45.497.917
0;it;21;921.481.788;4.547.046.575
0;it;50;915.995;45.450.124
0;ar;28;922.355.903;4.545.202.558
0;ar;28;922.362.504;454.523.043
0;ar;28;922.318.987;4.545.211.746", header=T,sep=";")