分别包含三个lists
A
,B
和C
,分别包含crop yields
及其latitudes
和longitudes
。 dataframe
中的每个lists
都有不同的列数,但三个列表具有相同的维度。
我想应用一个函数,比如在max
的每行中获取A
:
S=lapply(A, function(x) apply(x, 1, max))
问题:如何在B
和C
及其column indexes e.g. which.max
中获取相应的值,以便我可以说max
作物A
的收益率为latitude Y
和longitude X
?
然后我会创建一个包含A.max
,Lat
,Lon
欢迎合并三个列表以便于索引的其他方法。
谢谢。
A =list(structure(46952.8457255653, .Dim = c(1L, 1L)), structure(c(125267.690717471,
72379.4321037455, 72468.9078338802, 13200.2611700977), .Dim = c(1L,
4L)), structure(c(26513.0496549167, 26513.0496549167, 26513.0496549167,
26513.0496549167, 26513.0496549167, 19898.5698162604, 26513.0496549167,
26513.0496549167), .Dim = c(1L, 8L)), structure(c(19814.7410087512,
39570.9565633454), .Dim = 1:2), structure(c(52291.7656702341,
52291.7656702341), .Dim = 1:2))
B =list(structure(15.3210227272727, .Dim = c(1L, 1L)), structure(c(18.5599762470309,
18.8800251256281, 18.6755033557047, 18.3664122137405), .Dim = c(1L,
4L)), structure(c(17.625, 17.625, 17.625, 17.625, 17.6262295081967,
17.5, 17.625, 17.625), .Dim = c(1L, 8L)), structure(c(18.25,
18.4964285714286), .Dim = 1:2), structure(c(19.9533582089552,
19.9633204633205), .Dim = 1:2))
C= list(structure(-84.1903409090909, .Dim = c(1L, 1L)), structure(c(-102.525534441805,
-104.263190954774, -103.906711409396, -103.88358778626), .Dim = c(1L,
4L)), structure(c(-77.6250000000001, -77.6250000000001, -77.6250000000001,
-77.6250000000001, -77.6262295081967, -77.5, -77.625, -77.625
), .Dim = c(1L, 8L)), structure(c(-69.2391304347826, -69.6303571428571
), .Dim = 1:2), structure(c(-75.8619402985075, -75.8513513513514
), .Dim = 1:2))
答案 0 :(得分:1)
您可以使用map
&基于R.layout.page_fragment
中出现最大值的索引,从B
和C
获取值。来自A
的{{3}} purrr
的一部分。
tidyverse
答案 1 :(得分:1)
以下是基础R的答案:
max.indices <- sapply(A, which.max)
A.max <- sapply(A, max)
Lat <- sapply(seq_along(B), function(i) B[[i]][max.indices[i]])
Lon <- sapply(seq_along(C), function(i) C[[i]][max.indices[i]])
答案 2 :(得分:1)
这是一个基本的r选项:
S=sapply(A, function(x) apply(x, 1, which.max))
f <- function(x,y) x[y]
g <- function(x) mapply(f,x,S)
> mapply(rbind,g(A),g(B),g(C))
[,1] [,2] [,3] [,4] [,5]
[1,] 46952.84573 125267.69072 26513.050 39570.95656 52291.76567
[2,] 15.32102 18.55998 17.625 18.49643 19.95336
[3,] -84.19034 -102.52553 -77.625 -69.63036 -75.86194
答案 3 :(得分:1)
@ cmaher答案的变体,删除嵌套的map
个数据。
library(tidyverse)
tibble(max_yield = map_dbl(A, which.max)) %>%
transmute(crop_yield = map2_dbl(B, max_yield, ~.x[which.max(.y)]),
latitude = map2_dbl(B, max_yield, ~.x[which.max(.y)]),
longitude = map2_dbl(C, max_yield, ~ .x[which.max(.y)]))
# A tibble: 5 x 3
crop_yield latitude longitude
<dbl> <dbl> <dbl>
1 15.3 15.3 - 84.2
2 18.6 18.6 -103
3 17.6 17.6 - 77.6
4 18.2 18.2 - 69.2
5 20.0 20.0 - 75.9
答案 4 :(得分:0)
以下是使用ErrorException {#245 #message: "mkdir(): No such file or directory"
工具的解决方案。在这里,我们使用列表具有相同维度的事实,将它们放入tidyverse
和tbl
中,因此我们每次观察unnest
时都会有一行,{{1} }和yield
。我们必须首先将所有单行矩阵转换为向量,然后使用lat
执行此操作。数据采用此格式后,每个原始列表元素获取一个值就是一个简单的long
和map(as.vector)
。
group_by
由map2
(v0.2.0)创建于2018-04-23。