Извлечение одного и того же элемента из каждого списка в списке в другом списке - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть список (измененный из этого примера списки поднабора ), который выглядит как

l3 <- list(item1 = list(item1a = data.frame(matrix(1:9,ncol = 3)),
                        item1b=letters[1:5], 
                        item1c = c(T, F, T, T)), 
           item2 = list(item2a = data.frame(matrix(10:19,ncol = 3)),
                        item2b=letters[1:5], 
                        item2c = c(T, F, T, T)))



l3
$item1
    $item1$item1a
      X1 X2 X3
    1  1  4  7
    2  2  5  8
    3  3  6  9

$item1$item1b
[1] "a" "b" "c" "d" "e"

$item1$item1c
[1]  TRUE FALSE  TRUE  TRUE


$item2
$item2$item2a
  X1 X2 X3
1 10 14 18
2 11 15 19
3 12 16 10
4 13 17 11

$item2$item2b
[1] "a" "b" "c" "d" "e"

$item2$item2c
[1]  TRUE FALSE  TRUE  TRUE

Я хотел бы выбрать переменную X1 из каждого наименьшего списка. Это код, который я написал, но я пока не добился успеха.

 l3[[1:2]]["X1"]
[1] NA

Этот код ниже дает X1 только для первого вложенного фрейма данных (именно это я и хочу получить для всех фреймов данных)

l3[[1]]$item1a$X1 
[1] 1 2 3

Любая помощь очень ценится!

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Может быть, это поможет

library(purrr)
map(l3, ~ .x[[1]]$X1)

Или используя pluck с select

library(dplyr)
map(l3, ~ .x %>% 
            pluck(1) %>% 
            select(X1))

Или, если мы не энтузиаст цепи, то это можно сделать более компактнокак упомянул @ArtemSokolov

map(l3, pluck, 1, "X1")

Или с lapply

lapply(l3, function(x) x[[1]]$X1)
2 голосов
/ 22 апреля 2019

С plyr:

plyr::llply(l3,function(x)x[[1]]["X1"])
$item1
  X1
1  1
2  2
3  3

$item2
  X1
1 10
2 11
3 12
4 13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...