Я хочу создать столбец y
, который отражает значение другого столбца x
и устанавливает соседние значения для не-NA.
Допустим, у меня есть data.frame df
:
df = data.frame('index' = 1:10, 'x' = c(NA, NA, 1, NA, NA, NA, 2, NA, NA, NA))
> df
index x
1 1 NA
2 2 NA
3 3 1
4 4 NA
5 5 NA
6 6 NA
7 7 2
8 8 NA
9 9 NA
10 10 NA
Теперь я хочу создать столбец df$y
, который формирует некоторый «контекст» вокруг не-NA в df$x
. В частности, значение этих df$x
(здесь: 1 и 2) относится к их индексу ПЛЮС один до и один после их индекса, так что:
> df
index x y
1 1 NA NA
2 2 NA 1
3 3 1 1
4 4 NA 1
5 5 NA NA
6 6 NA 2
7 7 2 2
8 8 NA 2
9 9 NA NA
10 10 NA NA
Я попытался сделать это, найдя соответствующие начальные и конечные индексы «контекста» вокруг 1 и 2 с помощью:
temp_list = sapply(df$index, function(i){
if(!is.na(df$x[i])){
target_index_start = i - 1
target_index_end = i + 1
mini_context_iter = df$x[target_index_start:target_index_end]
} else {
NULL
}
})
... и это возвращает хороший список.
Проблема состоит в том, что это, кажется, не обрабатывает индексы, которые находятся вне контекста -1:+1
. С этим вопросом связан этот пост , но он останавливается перед созданием нового столбца.
Есть идеи, как я мог бы решить эту проблему более точно?