【问题标题】:How to make calculations across two different lists of dataframes?如何跨两个不同的数据框列表进行计算?
【发布时间】:2020-03-07 20:01:37
【问题描述】:

我有两个数据框列表,因此数据是 47 个数据框的列表,其中每个数据框都有列 [coords, x, y, liklihood, x.1, x.2, liklihood.1 等.] 和 dataA 是 47 个数据帧的列表,每个数据帧的长度与 data 中的相同,但表示不同坐标的列 [coords, x, y] 较少。

我想创建第三个列表,或向其中一个列表中的每个数据框添加一列,其中将包含从 pointDistance(p1, p2) 计算的距离,其中 p1 是每个数据框的 x 和 y 列在 list data 中,p2 是 list dataA 中每个数据框的 x 和 y 列。

我试图将数据框保存在列表中,而不是在我的全局环境中拥有 47*2 个单独的数据框。

最小可重现示例:

coords <- rnorm(10)
x <- rnorm(10)
y <- rnorm(10)
liklihood <- rnorm(10)
x.1 <- rnorm(10)
y.1 <- rnorm(10)

day1 <-  data.frame(coords,x,y,liklihood,x.1,y.1)

coords <- rnorm(10)
x <- rnorm(10)
y <- rnorm(10)
liklihood <- rnorm(10)
x.1 <- rnorm(10)
y.1 <- rnorm(10)

day2 <-  data.frame(coords,x,y,liklihood,x.1,y.1)

data <- list(day1,day2)

coords <- rnorm(10)
x <- rnorm(10)
y <- rnorm(10)
liklihood <- rnorm(10)

day1 <-  data.frame(coords,x,y,liklihood)

coords <- rnorm(10)
x <- rnorm(10)
y <- rnorm(10)
liklihood <- rnorm(10)


day2 <-  data.frame(coords,x,y,liklihood)

dataA <- list(day1,day2)

【问题讨论】:

  • 你能加一个minimale reproducible example吗? MRE 将使其他人更容易找到和测试您的问题的答案。这样你就可以帮助别人帮助你!
  • 到目前为止您尝试过什么?你的距离计算函数是什么?
  • 我不知道如何跨列表进行计算,甚至真正尝试任何事情...我正在使用 pointDistance 函数:rdocumentation.org/packages/raster/versions/3.0-12/topics/…
  • 您可以为此使用循环。对于 data 中的每个条目,您计算到每个条目 ind dataA 的距离。循环中的循环;)如果您不确定如何操作,我强烈建议您查看许多 R 教程中的一些。
  • 也许我误读了你的问题,你想要别的东西。我不确定我理解你的意思: pointDistance(p1, p2) 其中 p1 是 x 和 y 列 each list data中的数据框,p2是list dataA中each数据框的x和y列。跨度>

标签: r list dataframe lapply calculation


【解决方案1】:

您可以在基础 R 中使用 mapply 来执行此操作。

首先,编写一个函数,如果从您的两个列表中获得一对数据帧,则该函数将返回一个正确的数据帧,例如 data[[1]]dataA[[1]]

library(raster)

append_distances <- function(df1, df2)
{
  df1$distance <- pointDistance(cbind(df1$x, df1$y), cbind(df2$x, df2$y), lonlat = FALSE)
  return(df1)
}

现在我们只需将这个函数和你的两个列表传递给mapply

data <-  mapply(append_distances, data, dataA, SIMPLIFY = FALSE)

现在data 中的每个数据框都添加了一个距离列:

data
#> [[1]]
#>        coords          x           y  liklihood         x.1        y.1  distance
#> 1   0.4761741  0.7913819  0.11597299 -0.6159504 -0.17626836 -0.8649915 2.1378779
#> 2   0.2608518  0.4389639 -1.44510285 -0.5452702 -2.31927588 -0.5114613 3.0321765
#> 3   2.1098629  0.3457442  1.59630572 -0.3205454  0.25760236  1.6791924 0.4150714
#> 4   0.5937334 -0.2043505  0.23667944 -0.2480409 -0.52856599 -0.4263619 1.6662791
#> 5   0.2819461 -1.9768319  0.68344331 -0.4975349 -0.08315893  0.9271072 2.3841079
#> 6   0.5779044 -0.5706433  0.89377684 -1.0084165 -0.83697268  0.9928353 0.6818632
#> 7   0.1410554 -0.6133513  0.25957971 -0.1781339 -0.77489990 -0.7191718 0.8303696
#> 8  -1.1769578  0.9203776 -0.06258728 -0.8991639 -0.38907408 -0.8388408 0.5028145
#> 9  -0.1388739 -0.8279408  1.15568431 -0.3312423  1.17269754 -1.4530041 1.6042288
#> 10 -0.3755364  0.6285803  0.52453490  0.7323463 -0.49051839 -0.1949171 0.6205714
#> 
#> [[2]]
#>        coords           x          y  liklihood        x.1          y.1  distance
#> 1   2.2158425  0.16430566 -0.5721804 -0.7523029  0.2866881 -2.027529031 0.4418775
#> 2   1.5753250 -0.67190607 -0.1140359 -0.3125333 -0.5361148  0.153228235 1.7182954
#> 3   0.8558108  1.19404509 -1.5834463  0.3858246  0.4475970  0.460910344 1.6229581
#> 4   0.8027824  0.76579023 -0.5938679  0.5592208  0.5883806  0.231569460 3.3608275
#> 5  -1.1487244  0.01013471  0.6855049  0.7148735 -2.2822053  1.918921619 2.3790501
#> 6   0.1014336  0.73941541 -0.4487482  0.1758588  0.8579709  0.029777437 1.8923570
#> 7  -0.8238857  0.67911991 -0.9140873 -0.6887611 -1.0709704 -0.009789701 1.4694983
#> 8  -0.1553338  0.78560221 -0.8218460 -0.5537232  0.7295692  0.744225760 2.4279377
#> 9  -0.6297834  0.09747354  0.2048211 -1.0849396 -0.2201589  0.173386536 0.8638957
#> 10 -0.4616377 -0.51116686  0.3204535 -0.5285903  1.0053890 -0.534173400 1.0715881

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2019-09-14
    • 2019-08-14
    相关资源
    最近更新 更多