创建一个重复R data.frame

时间:2018-04-24 16:03:36

标签: r dataframe

我想创建一个列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,它构成一些' context'围绕df$x中的非NA。具体来说,这些df$x(这里:1和2)的值适用于它们的索引PLUS之前和索引之后的一个,因此:

> 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

我试图通过找到" context"的相关起始和结束索引来做到这一点。在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上下文之外的索引。相关问题是this SO post,但在创建新列之前会停止。

我是如何更准确地解决这个问题的?

1 个答案:

答案 0 :(得分:1)

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