![](/img/trans.png)
[英]R: split string into numeric and return the mean as a new column in a data frame
[英]Converting a column string to numeric in an r data frame
我有一個數據框,其中包含一列字符串,如下所示:
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
。這樣做的最佳方法是什么?我嘗試過使用lapply
,但似乎無法使其工作。
使用基數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)]
這可以在基數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
一個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
使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.