将数据框中每一行的向量分成两半
Split vectors in each row in a dataframe in half
我在 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,])
list(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)
它 returns 一个列表,其中一列包含所有值,一列包含“类型”,其中列出了“值”列中有多少个值。
如果我用
newDF <- split(oldDF$column, 2)
它 returns 一个错误,指出第一个参数必须是向量。
用 unnest_wider() 取消嵌套列也无助于当前步骤,因为那样我就无法轻松匹配坐标。我需要先分成两半再拆。
感谢您的任何见解!
您的 data.frame 有一个列表列。这些在 base 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....
这就是你说的拆分部分。如果你想要匹配,你需要具体说明结果应该是什么样子。
我在 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,]) list(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)
它 returns 一个列表,其中一列包含所有值,一列包含“类型”,其中列出了“值”列中有多少个值。
如果我用
newDF <- split(oldDF$column, 2)
它 returns 一个错误,指出第一个参数必须是向量。
用 unnest_wider() 取消嵌套列也无助于当前步骤,因为那样我就无法轻松匹配坐标。我需要先分成两半再拆。
感谢您的任何见解!
您的 data.frame 有一个列表列。这些在 base 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....
这就是你说的拆分部分。如果你想要匹配,你需要具体说明结果应该是什么样子。