Преобразование строки столбца в числовой во фрейме данных r - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть фрейм данных, который имеет столбец строк следующим образом:

    mydata <- c("-1.356670,35.355030",
            "-1.356670,35.355030", 
            "-1.356620,35.355890", 
            "-1.356930,35.358660", 
            "-1.357000,35.359060"
    )

    df <- data.frame(mydata)

Я хочу преобразовать его в фрейм данных, содержащий два столбца "long и lat, каждый из которых является числовымтипа. Каков наилучший способ сделать это? Я пытался использовать lapply, но не могу заставить его работать.

Ответы [ 4 ]

0 голосов
/ 10 февраля 2019

Используя strsplit с do.call, тогда нам просто нужно присвоить имя столбцам

newdf=do.call(rbind.data.frame, strsplit(mydata,','))
names(newdf)=c('long','lat')
newdf
       long       lat
1 -1.356670 35.355030
2 -1.356670 35.355030
3 -1.356620 35.355890
4 -1.356930 35.358660
5 -1.357000 35.359060
0 голосов
/ 10 февраля 2019

С основанием R вы можете сделать:

df$Long <- as.numeric(sapply(strsplit(as.character(df$mydata), ","), function(x) x[1]))
df$Lat <- as.numeric(sapply(strsplit(as.character(df$mydata), ","), function(x) x[2]))

               mydata     Long      Lat
1 -1.356670,35.355030 -1.35667 35.35503
2 -1.356670,35.355030 -1.35667 35.35503
3 -1.356620,35.355890 -1.35662 35.35589
4 -1.356930,35.358660 -1.35693 35.35866
5 -1.357000,35.359060 -1.35700 35.35906

Или с tstrsplit() из data.table:

df$Long <- as.numeric(tstrsplit(df$mydata, ",")[[1]])
df$Lat <- as.numeric(tstrsplit(df$mydata, ",")[[2]])

Также с tstrsplit() из data.table, как предложено@clmarquart:

setDT(df)[, c("lat", "long") := tstrsplit(mydata, ",", fixed = TRUE)]
0 голосов
/ 10 февраля 2019

Это можно сделать одной строкой в ​​базе R:

read.table(text = as.character(df$mydata), sep = ",", col.names = c("long", "lat"))

, давая:

     long      lat
1 -1.35667 35.35503
2 -1.35667 35.35503
3 -1.35662 35.35589
4 -1.35693 35.35866
5 -1.35700 35.35906
0 голосов
/ 10 февраля 2019

A tidyverse раствор.

library(tidyverse)

dat <- df %>%
  separate(mydata, into = c("Long", "Lat"), sep = ",", convert = TRUE)

# Print the data
dat
#       Long      Lat
# 1 -1.35667 35.35503
# 2 -1.35667 35.35503
# 3 -1.35662 35.35589
# 4 -1.35693 35.35866
# 5 -1.35700 35.35906
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...