我在 R 中有一個包含一列的資料框。每行都有一個在該列中具有不同坐標數量的向量,如下所示:
Column
1 c(66.3010025028633, 66.5439987180665, 86.6060028079833, 86.6549987795701)
2 c(66.5439987180665, 62.463001250907, 61.5060005190088, 58.0180015560271,
54.5610008237291, 50.770000457655, 47.522998810147, 46.0629997251572,
86.6549987795701, 86.7549972532207, 86.8050003054198, 86.7870025636175,
86.7460021972437, 86.7060012816339, 86.6409988399246, 86.597999572922)
3 c(46.0629997251572, 46.313999176321, 86.597999572922, 86.5609970096044)
4 c(70.0894851683059, 66.3010025028633, 86.4039611818631, 86.6060028079833)
確切的資料幀資料是:
dput(BoundaryCoordinates2 [1:4,])串列(C(66.3010025028633,66.5439987180665,86.6060028079833,86.6549987795701),C(66.5439987180665,62.463001250907,61.5060005190088,58.0180015560271,54.5610008237291,50.770000457655,47.522998810147,46.0629997251572,86.6549987795701,86.7549972532207,86.8050003054198,86.7870025636175,86.7460021972437 ,86.7060012816339,86.6409988399246,86.597999572922),C(46.0629997251572,46.313999176321,86.597999572922,86.5609970096044),C(70.0894851683059,66.3010025028633,86.4039611818631,86.6060028079833))
我的最終目標是匹配坐標以創建位置點。
不幸的是,每個向量都按所有經度和緯度列出坐標,并且每個向量都有不同數量的坐標。我想將每個向量一分為二以形成兩個不同的向量,我可以更輕松地使用它們來匹配坐標對。
示例:從第 1 行的向量中,我想將第一個經度 (66.30...) 與第一個緯度 (86.60...) 配對,然后將第二個經度與第二個緯度配對。
我的下一步是想將列分成兩列,保留行。第一列包含原始向量的前半部分(經度),第二列包含原始向量的后半部分(緯度)。
我無法將原始向量變成字串進行拆分,因為每個向量都有不同數量的坐標。
當我使用 split() 作為:
newDF <- split(oldDF, 2)
它回傳一個串列,其中一列包含所有值,一列包含“型別”,用于列出“值”列中有多少個值。
如果我使用
newDF <- split(oldDF$column, 2)
它回傳一個錯誤,指出第一個引數必須是一個向量。
使用 unnest_wider() 取消嵌套列也無助于當前步驟,因為這樣我就無法輕松匹配坐標。在我取消嵌套之前,我需要分成兩半。
感謝您的任何見解!
uj5u.com熱心網友回復:
您的 data.frame 有一個串列列。這些在基礎 R 中維護有點棘手,但是如果您使用 I(),它會保持在一起。
因為該列是一個串列,所以您需要lapply遍歷它。
我自己編的資料:
set.seed(42)
df <- data.frame(Column = I(list(rnorm(4), rnorm(16), rnorm(2), rnorm(8))))
df$Column
[[1]]
[1] 1.3709584 -0.5646982 0.3631284 0.6328626
[[2]]
[1] 0.40426832 -0.10612452 1.51152200 -0.09465904 2.01842371 -0.06271410 1.30486965 2.28664539 -1.38886070 -0.27878877
[11] -0.13332134 0.63595040 -0.28425292 -2.65645542 -2.44046693 1.32011335
[[3]]
[1] -0.3066386 -1.7813084
[[4]]
[1] -0.1719174 1.2146747 1.8951935 -0.4304691 -0.2572694 -1.7631631 0.4600974 -0.6399949
這是拆分:
split_df <- lapply(df$Column, \(x) data.frame(
lngs = I(list(x[1:(length(x) / 2)])),
lats = I(list(x[(length(x) / 2 1):length(x)]))))
split_df <- do.call('rbind', split_df)
split_df
lngs lats
1 1.370958.... 0.363128....
2 0.404268.... -1.38886....
3 -0.30663.... -1.78130....
4 -0.17191.... -0.25726....
這只是你所說的拆分部分。如果您想要匹配,您需要具體說明結果應該是什么樣子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/343039.html
上一篇:用于重復測量的Lmer
