/ / Numerisches Format ändern, falsches Format in Datensatz - r, Formatierung, Datensatz

Ändern Sie das numerische Format, das falsche Format im Dataset - r, Formatierung, Dataset

Ich habe einen Datensatz erhalten, der analysiert werden soll. Die ersten Zeilen lauten:

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

Das Problem ist folgendes: Die Spalten von Längengrad und Breitengrad sind nicht gut formatiert in dem Sinne, dass, da ich weiß, wo diese Daten entnommen werden, Längengrad "9, ..." und Breitengrad "45, ..."

Wie Sie sehen, ist auch die Anzahl der Ziffern in jedem Längen- und Breitengrad-Datensatz unterschiedlich!

Jede Idee, wie man dieses Problem lösen kann (möglicherweise in R)

Antworten:

3 für die Antwort № 1

Wenn Sie sich mit diesen Daten "festhalten", könnte dies helfen:

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 für die Antwort № 2

Dies können Sie mit tun 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

DATEN

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=";")