合并坐标列并构造序列

数据挖掘 r
2022-02-23 16:19:31

我必须关注数据框。

    x1     x2          x3
    0   58.33546    15.14554
    0   58.33604    15.14571
    0   58.33645    15.14581
    0   58.33681    15.14591
    0   58.33722    15.14600
    0   58.33810    15.14604
    0   58.33900    15.14599
    0   58.33966    15.14578

由long和lat组成,每一对都属于一个字符串(0,1,3,4等,上面只显示字符串0)。

我想先用 (x2,x3) 对构建一个新列。我怎么做?

上面对应0的坐标实际上是一个旅程(比如X),如果有另一个旅程(Y)的第一个坐标与最后一个X相同,我想将序列X和Y坐标合并在一起,称那个旅程X (只是 X 的延续)。

我的数据集称为数据,由于某种原因将它们合并在一起无法使用

data[, x4 := paste(data$x2, data$x3)]

这将创建一个新列,仅播放 x2。

2个回答

这可能取决于您使用新生成的列。在这里,我尝试重现您的示例:

x1 <- c(0, 0)
x2 <- c(58.33546, 58.33604)
x3 <- c(15.14554, 15.14571)
df <- data.frame(x1, x2, x3)
df$x4 <- paste("(", as.character(df$x2), ", ", as.character(df$x3), ")")

df$x4看起来像

[1] "( 58.33546 ,  15.14554 )" "( 58.33604 ,  15.14571 )"

如果要显示坐标,上面的格式应该没问题。如果您想对该列进行进一步分析,则需要进行一些其他转换。

data.table支持列表类型列。进行分配时,您需要将它们放在附加list()或使用`:=`(newcol=listvalue)语法中,而不是newcol:=listvalue在列表具有单个元素时避免简化。

library(data.table)
data<-as.data.table(data)
data[, `:=`(x2x3=mapply(c, x2,x3, SIMPLIFY=F))]
data[, .(path=list(x1x2)), by=x1]