[英]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.