更改数字格式,数据集中的错误格式

3

我收到了一个数据集需要进行分析,前几行如下:

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)?

2
在R中有一些方法可以处理这些数据,但看起来其中一些行是虚假的。它们可能是打错了或者是来自于错误的地理区域的信息。我建议你回到数据提供者那里并询问发生了什么事情。 - lmo
我敢打赌这是在Excel中打开和保存CSV文件的影响... - digEmAll
2个回答

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

0

以下是您可以使用基本的 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=";")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接