2

data.frame のいくつかの列を合計する必要があるというルールで、NA複数の観測値が欠落しているNA場合は列を合計する必要があります。

このようなデータがあるとします。

dfn <- data.frame(
a  = c(3, 3, 0, 3),
b  = c(1, NA, 0, NA),
c  = c(0, 3, NA, 1))

dfn
  a  b  c
1 3  1  0
2 3 NA  3
3 0  0 NA
4 3 NA  1

ルールを適用し、2 つ未満の行を合計しますNA。だから私はこのようなものを手に入れます。

  a  b  c
1 3  1  0
2 3 NA  3
3 0  0 NA
4 3 NA  1
5 9 NA  4

colSums(dfn, na.rm = FALSE)とで遊んでみましたcolSums(dfn, na.rm = TRUE)。私の実際のデータには、3 つ以上の列と 4 つ以上の行があります。欠けているものを何らかの方法で数えて、それをルールとして使用できると思いますか?

4

2 に答える 2

5

colSums単独でこれを行うことはできないと思いますが、次を使用して結果に追加できifelseます。

colSums(dfn,na.rm=TRUE) + ifelse(colSums(is.na(dfn)) > 1, NA, 0)
 a  b  c 
 9 NA  4 
于 2013-01-18T18:17:18.623 に答える
1

@Jamesの回答に問題はありませんが、少しクリーンな方法を次に示します。

colSums(apply(dfn, 2, function(col) replace(col, match(NA, col), 0)))
# a  b  c 
# 9 NA  4 

match(NA, col)NAは、 colの最初のインデックスを返し、replaceそれを に置き換えて0新しい列をapply返し、matrixすべての新しい列で a を返します。

于 2013-01-18T18:40:23.097 に答える