Создание столбца, который повторяет смежные значения в R data.frame - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу создать столбец 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. С этим вопросом связан этот пост , но он останавливается перед созданием нового столбца.

Есть идеи, как я мог бы решить эту проблему более точно?

1 Ответ

0 голосов
/ 24 апреля 2018
library(tidyverse)
df%>%mutate(y=coalesce(x,lead(x),lag(x)))
   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...