3

私は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

ありがとうございました。

4

4 に答える 4

5

ここでは、各 NA をその前後の最新の非 NA に置き換えるfrom na.locffromパッケージを使用したソリューションを示します。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

于 2013-03-09T07:42:01.567 に答える
1

これは、あなたが取ることができる基本的な手動アプローチです:

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]))
于 2013-03-09T07:09:11.933 に答える
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
于 2013-03-09T07:38:41.873 に答える