R 按组使用现有值替换NAs
我需要使用相同相对位置的VAL和VAL2中的值替换s1和s2中缺失的值。我无法按组索引dplyr中的位置。如果有其他方法,我很乐意尝试 资料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
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