行ごとにデータセットに対して算術演算を実行しようとしましたが、観測値が欠落しているため、必要な答えを得ることができませんでした。たとえば、使用すると、apply
欠落した観測値が得られました。rowSums
最終的に、最初にいくつかの列に-1を掛けることで(それらを減算するのではなく)、目的の答えを得ました。また、ループを使用して目的の答えを得ました。これら 3 つのアプローチと、その他の 1 つのアプローチを以下に示します。
で望みの答えを得ることができapply
ますか?私が見落としている簡単な方法はありますか?私の質問は次のようなものです: R で欠落/不完全なデータを処理する - NA をマスクするが削除しない機能はありますか? 私は本当にベースRが好きですが、1つの答えはzooパッケージを見ることを提案しました。アドバイスをありがとう。これは基本的な質問のようです。明らかな解決策を見落としている場合は申し訳ありません。(欠落している観測のタグがないことに気付きました。)
df.1 <- read.table(text='
AA BB CC DD EE FF GG HH II JJ
100 2 3 4 5 6 7 8 9 10
200 12 13 14 15 16 17 18 19 20
300 NA 23 24 25 26 NA 28 29 30
400 32 33 34 35 36 37 38 NA 40
500 42 43 44 45 46 47 48 49 50
', header=T, na.strings = "NA")
# this does not work
apply(df.1[,c("AA","BB", "CC", "DD", "FF", "GG", "II", "JJ")], 1,
function(x) {x[1] - (x[2] + x[3] + x[4]) - (x[5] + x[6] + x[7]) + x[8]})
# [1] 79 129 NA NA 279
df.2 <- data.frame(df.1$AA, df.1$BB, df.1$CC, df.1$DD, df.1$FF, df.1$GG, df.1$II, df.1$JJ)
colnames(df.2) <- c('AA', 'BB', 'CC', 'DD', 'FF', 'GG', 'II', 'JJ')
# this does not work
df.2$AA - (df.2$BB + df.2$CC + df.2$DD) - (df.2$FF + df.2$GG + df.2$II) + df.2$JJ
# [1] 79 129 NA NA 279
# this works
df.3 <- data.frame(df.2$AA, -1 * df.2$BB, -1 * df.2$CC, -1 * df.2$DD, -1 * df.2$FF, -1 * df.2$GG, -1 * df.2$II, df.2$JJ)
rowSums(df.3, na.rm = TRUE)
# [1] 79 129 228 268 279
# this works
my.sum <- rep(NA, nrow(df.2))
for (i in 1:nrow(df.2)) {
my.sum[i] <- sum(df.2$AA[i], -1 * df.2$BB[i], -1 * df.2$CC[i], -1 * df.2$DD[i], -1 * df.2$FF[i], -1 * df.2$GG[i], -1 * df.2$II[i], df.2$JJ[i], na.rm = TRUE)
}
my.sum
# [1] 79 129 228 268 279