Как извлечь значения из списка с разными интервалами (определяется списком) - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу извлечь значения из столбца в кадре данных через различные интервалы. Интервалы хранятся в списке. Есть ли способ извлечь это?

Столбец выглядит так:

6211
6111
711
414  
3211  
3311 
3411  
3511 
6211 
6111
...

и такой список:

"2"  "4"  "2"  "6"  "15" "2"  "9"...

Теперь я хочу применить список к столбцу df (список определяет шаги между требуемыми значениями. Результат должен быть сохранен как новая переменная в df. Из-за пропущенных значений нам нужно заполнить новый столбец с NA.Это должно быть сохранено в интервалах, определенных в списке.

Таким образом, результат должен выглядеть следующим образом:


#    X       Y
1   6211    711
2   6111     NA
3    711     NA
4    414    3411
5   3211     NA
....

где число NA между строками снова определяется вектором. На последнем шаге я хочу вставить X и Y вместе, чтобы получить ключевую переменную.

Спасибо!

1 Ответ

0 голосов
/ 02 апреля 2019

Мы можем использовать cumsum над вектором и подмножество столбца

df$x[cumsum(c(1,vec))]
#[1] 6211  711 3411 6211

Или, если вы хотите, чтобы это был столбец

df[cumsum(c(1,vec)), ,drop = FALSE]

Или используйте slice из dplyr

library(dplyr)
df %>%  slice(cumsum(c(1, vec)))

#    x
#1 6211
#2  711
#3 3411
#4 6211

EDIT

Для обновленной части, чтобы получить новый столбец Y мы можем сделать

vals <- df$x[cumsum(c(1,vec))][-1]
df$y <- NA
df$y[cumsum(c(1, vec + 1))] <- vals

Данные

df <- data.frame(x = c(6211, 6111, 711, 414,3211,3311, 3411,3511,6211,6111))
vec <- as.numeric(c("2","4","2"))
...