1

同じ長さの列を持つさまざまな data.frames があり、要素ごとに複数の 2 行をまとめて合計しようとしています。たとえば、以下は、この操作を実行したい 2 つのベクトルです。

> a.1[186,]
q01_a q01_b q01_c q01_d q01_e q01_f q01_g q01_h q01_i q01_j q01_k q01_l q01_m
    3     3     3     3     2     2     2     3     1    NA    NA     2     2

> u.1[186,]
q04_avl_a q04_avl_b q04_avl_c q04_avl_d q04_avl_e q04_avl_f q04_avl_g q04_avl_h q04_avl_i q04_avl_j q04_avl_k q04_avl_l q04_avl_m        
        4         2         3         4         3         4         4         4         3         4         3         3         3`

問題は、さまざまな行にさまざまな数の NA があることです。私がやりたいことは、欠損値 (上記の例の 10 番目と 11 番目の位置) で乗算をスキップし、加算後に乗算された要素の数 (上記の例の 11) で除算することです。ほとんどの行は完全で、13 を掛けるだけです。

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

4

2 に答える 2

8
x <- c(3,3,3,3,2,2,2,3,1,NA,NA,2,2)
y <- c(4,2,3,4,3,4,4,4,3,4,3,3,3)

sum(x*y,na.rm = T)/sum(!is.na(x*y))
[1] 8

編集

因子の場合、最初にそれらを数値に変換します

x <- as.factor(c(3,3,3,3,2,2,2,3,1,NA,NA,2,2))
y <- as.factor(c(4,2,3,4,3,4,4,4,3,4,3,3,3))
xy <- as.numeric(as.character(x)) * as.numeric(as.character(y))
sum(xy,na.rm = T)/sum(!is.na(xy))
[1] 8
于 2010-05-15T16:45:22.790 に答える
1

ここでいくつかの進歩を遂げています。FseriesパッケージのsubstituteNAを使用して、欠損値をすべてゼロに変更しました。

> sum(a.11[186,]*u.11[186,])/min((rowSums(a.11!=0)), rowSums(u.11!=0))

これをループで機能させる必要があります。

于 2010-05-15T16:41:13.687 に答える