如何在R中的一个 Dataframe 中制作四个具有相同ID的点的组合?

qncylg1j  于 2023-05-11  发布在  其他
关注(0)|答案(2)|浏览(116)

我目前正在尝试从R中的数据框中创建正方形(多边形),为了做到这一点(根据guide),我需要一个数据框,其中包含4组成对的点作为它们的lon-lat坐标。
使用此示例:

sample_df <- data.frame(id = c(1,2),
                        t = c('2020-01-01','2020-01-01'),
                        intensity = c(1.3,0.6),
                        x1 = c(113.75,114.00),
                        x2 = c(114.00,114.25),
                        y1 = c(8.75,8.75),
                        y2 = c(9.00,9.00))
身份证t强度x1x2y1y2
12020-01-01 2020-01-011.3一百一十三点七五一百一十四点8.75九点
2020-01-01 2020-01-010.6一百一十四点一百一十四点二五8.75九点

我想要实现的是创建一个 Dataframe ,该 Dataframe 保留tintensity列,这些列分布到id列,乘以4对x1 paired to y1x2 paired to y1x2 paired to y2x1 paired to y2值,作为lonlat列。
预期的输出将是一个 Dataframe ,看起来像这样:
| 身份证|t|强度|隆|后来|
| --------------|--------------|--------------|--------------|--------------|
| 1| 2020-01-01 2020-01-01| 1.3|一百一十三点七五|8.75|
| 1| 2020-01-01 2020-01-01| 1.3|一百一十四点|8.75|
| 1| 2020-01-01 2020-01-01| 1.3|一百一十四点|九点|
| 1| 2020-01-01 2020-01-01| 1.3|一百一十三点七五|九点|
| 二|2020-01-01 2020-01-01| 0.6|一百一十四点|8.75|
| 二|2020-01-01 2020-01-01| 0.6|一百一十四点二五|8.75|
| 二|2020-01-01 2020-01-01| 0.6|一百一十四点二五|九点|
| 二|2020-01-01 2020-01-01| 0.6|一百一十四点|九点|
我目前被卡住了,但我正在玩dplyr包的mutate()功能,或reshape2melt()
我将非常感谢你的投入。

aydmsdu9

aydmsdu91#

这是我相信的2个整形/枢轴:

library(tidyr)
library(dplyr)
sample_df %>%
    pivot_longer(c("x1","x2"), names_to=NULL, values_to="lon") %>%
    pivot_longer(c("y1","y2"), names_to=NULL, values_to="lat")

## A tibble: 8 × 5
#     id t          intensity   lon   lat
#  <dbl> <chr>          <dbl> <dbl> <dbl>
#1     1 2020-01-01       1.3  114.  8.75
#2     1 2020-01-01       1.3  114.  9   
#3     1 2020-01-01       1.3  114   8.75
#4     1 2020-01-01       1.3  114   9   
#5     2 2020-01-01       0.6  114   8.75
#6     2 2020-01-01       0.6  114   9   
#7     2 2020-01-01       0.6  114.  8.75
#8     2 2020-01-01       0.6  114.  9

lon变量是正确的-* tibles * 的打印方法确实很奇怪,但是分别将(113.75114.25)和114.0显示为114.114

brgchamk

brgchamk2#

我将unnest a nestedtibble(这通常是一种进行组合的惊人方法):

library(tidyr)
x1 = c(113.75,114.00)
x2 = c(114.00,114.25)
y1 = c(8.75,8.75)
y2 = c(9.00,9.00)
tibble(
  id = c(1,2),
  t = c('2020-01-01','2020-01-01'),
  intensity = c(1.3,0.6),
  long = list(c(x1, x2)),
  lat = list(c(y1, y2))
) %>% 
  unnest(c(long, lat))
#> # A tibble: 8 × 5
#>      id t          intensity  long   lat
#>   <dbl> <chr>          <dbl> <dbl> <dbl>
#> 1     1 2020-01-01       1.3  114.  8.75
#> 2     1 2020-01-01       1.3  114   8.75
#> 3     1 2020-01-01       1.3  114   9   
#> 4     1 2020-01-01       1.3  114.  9   
#> 5     2 2020-01-01       0.6  114.  8.75
#> 6     2 2020-01-01       0.6  114   8.75
#> 7     2 2020-01-01       0.6  114   9   
#> 8     2 2020-01-01       0.6  114.  9

创建于2023-05-04使用reprex v2.0.2

相关问题