R 按组使用现有值替换NAs

R 按组使用现有值替换NAs,r,dplyr,R,Dplyr,我需要使用相同相对位置的VAL和VAL2中的值替换s1和s2中缺失的值。我无法按组索引dplyr中的位置。如果有其他方法,我很乐意尝试 资料 id=c(1,1,1,1,1,1,2,2,2,2) 日期=101:110 VAL=c(101:110) VAL2=c(1:10) 测试=数据帧(id、日期、VAL、VAL2) 测试组%u由(id)%>% 突变(s1=rollsumr(VAL,k=3,fill=NA), s2=rollsumr(VAL,k=2,fill=NA)) 测试 id日期vals2 s

我需要使用相同相对位置的VALVAL2中的值替换s1s2中缺失的值。我无法按组索引dplyr中的位置。如果有其他方法,我很乐意尝试

资料

id=c(1,1,1,1,1,1,2,2,2,2)
日期=101:110
VAL=c(101:110)
VAL2=c(1:10)
测试=数据帧(id、日期、VAL、VAL2)
测试组%u由(id)%>%
突变(s1=rollsumr(VAL,k=3,fill=NA),
s2=rollsumr(VAL,k=2,fill=NA))
测试
id日期vals2 s1 s2
1    1.   101 101 1 NA
2    1.   102 102 2 NA 203
3    1.   103   103     3   306   205
4    1.   104   104     4   309   207
5    1.   105   105     5   312   209
6    1.   106   106     6   315   211
7    2.   107 107 7 NA
8    2.   108 108 8 NA 215
9    2.   109   109     9   324   217
10    2.   110   110    10   327   219
我的代码(不工作)

test%
突变(s1=替换(s1,?NA),
s2=更换(s2,??NA))
期望输出

      id  date  vals vals2    s1    s2
   <dbl> <int> <int> <int> <int> <int>
 1    1.   101   101     1    101   1
 2    1.   102   102     2    102   203
 3    1.   103   103     3   306   205
 4    1.   104   104     4   309   207
 5    1.   105   105     5   312   209
 6    1.   106   106     6   315   211
 7    2.   107   107     7    107    7
 8    2.   108   108     8    108   215
 9    2.   109   109     9   324   217
10    2.   110   110    10   327   219
id日期VAL2 s1 s2
1    1.   101   101     1    101   1
2    1.   102   102     2    102   203
3    1.   103   103     3   306   205
4    1.   104   104     4   309   207
5    1.   105   105     5   312   209
6    1.   106   106     6   315   211
7    2.   107   107     7    107    7
8    2.   108   108     8    108   215
9    2.   109   109     9   324   217
10    2.   110   110    10   327   219

您可以使用
ifelse

test %>% 
 mutate(s1 = ifelse(is.na(s1), vals, s1),
        s2 = ifelse(is.na(s2), vals2, s2))
# A tibble: 10 x 6
# Groups:   id [2]
#     id  date  vals vals2    s1    s2
#  <dbl> <int> <int> <int> <int> <int>
#1    1.   101   101     1   101     1
#2    1.   102   102     2   102   203
#3    1.   103   103     3   306   205
#4    1.   104   104     4   309   207
#5    1.   105   105     5   312   209
#6    1.   106   106     6   315   211
#7    2.   107   107     7   107     7
#8    2.   108   108     8   108   215
#9    2.   109   109     9   324   217
#10   2.   110   110    10   327   219
测试%>%
突变(s1=ifelse(is.na(s1),vals,s1),
s2=ifelse(is.na(s2),vals2,s2))
#一个tibble:10x6
#组别:id[2]
#id日期vals2 s1 s2
#       
#1    1.   101   101     1   101     1
#2    1.   102   102     2   102   203
#3    1.   103   103     3   306   205
#4    1.   104   104     4   309   207
#5    1.   105   105     5   312   209
#6    1.   106   106     6   315   211
#7    2.   107   107     7   107     7
#8    2.   108   108     8   108   215
#9    2.   109   109     9   324   217
#10   2.   110   110    10   327   219
      id  date  vals vals2    s1    s2
   <dbl> <int> <int> <int> <int> <int>
 1    1.   101   101     1    101   1
 2    1.   102   102     2    102   203
 3    1.   103   103     3   306   205
 4    1.   104   104     4   309   207
 5    1.   105   105     5   312   209
 6    1.   106   106     6   315   211
 7    2.   107   107     7    107    7
 8    2.   108   108     8    108   215
 9    2.   109   109     9   324   217
10    2.   110   110    10   327   219
test %>% 
 mutate(s1 = ifelse(is.na(s1), vals, s1),
        s2 = ifelse(is.na(s2), vals2, s2))
# A tibble: 10 x 6
# Groups:   id [2]
#     id  date  vals vals2    s1    s2
#  <dbl> <int> <int> <int> <int> <int>
#1    1.   101   101     1   101     1
#2    1.   102   102     2   102   203
#3    1.   103   103     3   306   205
#4    1.   104   104     4   309   207
#5    1.   105   105     5   312   209
#6    1.   106   106     6   315   211
#7    2.   107   107     7   107     7
#8    2.   108   108     8   108   215
#9    2.   109   109     9   324   217
#10   2.   110   110    10   327   219