我有两个数据帧列表,因此数据是47个数据帧的列表,其中每个数据帧都有列[coords,x,y,liklihood,x.1,x.2,liklihood.1等。]和dataA是47个数据帧的列表,每个数据帧的长度与数据中的帧长度相同,但表示不同坐标的列[coords,x,y]较少。
我想创建第三个列表,或向其中一个列表中的每个数据框添加一列,其中将包含从pointDistance(p1,p2)的距离计算,其中p1是每个数据框的x和y列在列表数据中,p2是列表数据A中每个数据帧的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)
答案 0 :(得分:2)
您可以在基数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