[英]How can I select a specific element across all rows from a list within a tibble in R
我有一个小标题,其中一列是包含 2x2 矩阵的列表。 我希望能够 select 来自 tibble 中所有行的矩阵中的特定元素。 我能够使用索引 select 来自一个 tibble 行的特定元素:
t1 <- tibble(x = 1:2, y = 1, z = x ^ 2 + y)
rM1 <- matrix(c(2,3,1,4), nrow=2, ncol=2, byrow = TRUE)
rM2 <- matrix(c(10,19,9,15), nrow=2, ncol=2, byrow = TRUE)
t1$my.lists <- list(rM1,rM2)
t1[[4]][[2]][[2,2]]
[1] 15
但是,当我尝试跨多行访问该特定元素时,出现错误:
t1[[4]][1:2][[2,2]]
Error in t1[[4]][1:2][[2, 2]] : incorrect number of subscripts
我也尝试过使用管道和切片等函数,但仍然无法达到预期的结果。 在此示例中,我期望返回:
[1] 4 15
其中 4 是来自 rM1 的 2x2 元素,15 是来自 rM2 的 2x2 元素。 当然,我可以编写一个循环来实现这一点,但我认为还有一种更直接的方法可以做到这一点。
我们可以使用sapply
循环list
第 4 列,并根据行/列索引提取元素
sapply(t1[[4]], function(x) x[2, 2])
#[1] 4 15
或与map
library(dplyr)
library(purrr)
t1 %>%
mutate(new = map_dbl(my.lists, ~ .x[2, 2]))
# A tibble: 2 x 5
# x y z my.lists new
# <int> <dbl> <dbl> <list> <dbl>
#1 1 1 2 <dbl[,2] [2 × 2]> 4
#2 2 1 5 <dbl[,2] [2 × 2]> 15
OP 的代码没有成功,因为下面是一个list
t1[[4]][1:2]
#[[1]]
# [,1] [,2]
#[1,] 2 3
#[2,] 1 4
#[[2]]
# [,1] [,2]
#[1,] 10 19
#[2,] 9 15
并且可以通过逐个选择每个list
元素或使用循环来完成行/列索引
t1[[4]][1:2][[2]][2,2]
#[1] 15
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.