Доступ к нескольким элементам из списка на основе индексов, хранящихся в другом списке - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь извлечь элементы из столбца фрейма данных, который содержит список, представьте себе столбец df $ A с 3 строками, в каждой строке содержится список:

c(111, 222, 333)
c(444, 555, 666)
c(777, 888, 999)

(списки варьируются от одного додвадцать тридцать элементов)

, в то время как в столбце df $ B хранятся определенные позиции элементов:

1
c(1, 2)
c(1, 2, 3)

Моя цель состоит в том, чтобы извлечь в столбец df $ C элементы из столбца df $ B, основываясь наих индекс хранится в столбце df $ A, поэтому столбец df $ C будет выглядеть так:

111
c(444, 555)
c(777, 888, 999)

Я уже пробовал разные комбинации unlist, sapply, mutate, доступа к элементам списка с вектором, например

df$A[nrow][[c(df$B)]]

и так далее, но я продолжаю сталкиваться с различными ошибками и не приблизился к желаемому результату.

Наконец, я хочу добиться суммирования целых чисел в каждой строке в определенной позиции списка, чтобы потенциальный df $ D мог выглядеть как

111
999
2664

Боюсь, что, возможно,весь мой подход неверен, и я заставляю R действовать так, как это было не задумано, но до сих пор мне обычно удавалось получить правильные ответы на каждый вопрос, который я себе задавал.

1 Ответ

0 голосов
/ 28 ноября 2018

не уверен, что весь data.frame содержит списки:

data: (хотя не рекомендуется) просто используйте два списка (l1, l2)

df1 <- data.frame(A = 1:3)

df1$A <- list(c(111, 222, 333),
              c(444, 555, 666),
              c(777, 888, 999))

df1$B <- list(1,
              c(1, 2),
              c(1, 2, 3))

код: его время для ?mapply.

#df1$D <-
mapply(function(vals, inds) {sum(vals[inds])}, vals = df1$A, inds = df1$B)

результат:

#[1]  111  999 2664
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...