私はRを初めて使用します。私の質問は、欠測データポイントの前後の平均を使用して欠測値を代入する方法です。
例;
各NAの上下の平均を代入値として使用します。
-行番号3の平均は38.5です
-行番号7の平均は32.5です
age
52.0
27.0
NA
23.0
39.0
32.0
NA
33.0
43.0
ありがとうございました。
私はRを初めて使用します。私の質問は、欠測データポイントの前後の平均を使用して欠測値を代入する方法です。
例;
各NAの上下の平均を代入値として使用します。
-行番号3の平均は38.5です
-行番号7の平均は32.5です
age
52.0
27.0
NA
23.0
39.0
32.0
NA
33.0
43.0
ありがとうございました。
ここでは、各 NA をその前後の最新の非 NA に置き換えるfrom na.locf
fromパッケージを使用したソリューションを示します。zoo
0.5*(na.locf(x,fromlast=TRUE) + na.locf(x))
[1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0
複数の連続した NA がある場合、ここでの利点。
x <- c(52, 27, NA, 23, 39, NA, NA, 33, 43)
0.5*(na.locf(x,fromlast=TRUE) + na.locf(x))
[1] 52 27 25 23 39 36 36 33 43
EDIT
rev
引数は廃止されたので、置き換えますfromlast
これは、あなたが取ることができる基本的な手動アプローチです:
age <- c(52, 27, NA, 23, 39, 32, NA, 33, 43)
age[is.na(age)] <- rowMeans(cbind(age[which(is.na(age))-1],
age[which(is.na(age))+1]))
age
# [1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0
または、単一の列があるように見えるためdata.frame
:
mydf <- data.frame(age = c(52, 27, NA, 23, 39, 32, NA, 33, 43))
mydf[is.na(mydf$age), ] <- rowMeans(
cbind(mydf$age[which(is.na(mydf$age))-1],
mydf$age[which(is.na(mydf$age))+1]))
別の方法:
age <- c(52, 27, NA, 23, 39, 32, NA, 33, 43)
age[is.na(age)] <- apply(sapply(which(is.na(age)), "+", c(-1, 1)), 2,
function(x) mean(age[x]))
age
## [1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0