數據幀之間NA取代我有這樣的數據df.1
:R:基於索引
month a b c
1 0 0.000000000 0.000000000
2 0 0.000000000 0.001503194
3 0 0.000000000 0.000000000
4 0 0.000000000 0.000000000
5 0 0.000000000 0.000000000
6 0 0.000000000 0.000000000
7 0 0.000000000 0.000000000
8 0 0.000000000 0.000000000
9 0 0.000000000 0.000000000
10 0 0.000000000 0.000000000
11 NA NA NA
12 NA NA NA
1 0 0.000000000 0.000000000
2 0 0.001537279 0.006917756
3 0 0.000000000 0.003669725
4 0 0.000000000 0.000000000
5 0 0.000000000 0.000000000
6 0 0.000000000 0.000000000
7 0 0.000000000 0.000000000
8 0 0.000000000 0.000000000
9 0 0.000000000 0.000000000
10 0 0.000000000 0.000000000
11 0 0.000000000 0.013513514
12 NA NA NA
,並將該數據df.2
:
month a b c
1 0.03842077 0.002266291 0.000000000
2 0.01359501 0.001027937 0.000000000
3 0.08631519 0.008732519 0.001376147
4 0.26564710 0.083635347 0.019053692
5 0.34839088 0.152203121 0.021010075
6 0.31767367 0.152029019 0.029397773
7 0.31507761 0.110973916 0.023445471
8 0.29773872 0.096458381 0.026745770
9 0.31226976 0.109342562 0.023996392
10 0.23841220 0.081582743 0.021674228
11 0.04379016 0.003519300 0.000000000
12 0.02244389 0.002493766 0.000000000
我向替補多值NA(並且僅NA)當df.1
[,2:4]的值在df.2
[,2:4]時列1中的索引(month
)相同。我試着用這個代碼:
res_new <- data.frame(matrix(nrow=nrow(df.1),ncol=3))
for (n in 1:12){
res_new <- data.frame(ifelse(is.na(df.1[which(df.1[,1] == n),2:4])==TRUE,df.2[which(df.2[,1] == n),2:4],df.1[,n]))
}
但結果卻是一個很大的新矩陣,其中在df.1
每個NA值取代的,在df.2
所有的價值如何能做到這一點? (我的實際數據幀要大得多)
那麼,這樣就可以用循環來做到這一點嗎? (我認爲...) – skylobo
@skylobo是的,這是絕對有可能的。你可以使用這個(假設df.1和df之間的列匹配。2): (i in 1:NCOL(df.1))df.1 [,i] < - ifelse(is.na(df.1 [,i]),df.2 [,i] [match(df.1 $ month,df.2 $ month)],df.1 [,i]) } – user108363