1

我有一个不同的data.frames,列的长度相同,我试图将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 包中的替代NA 将所有缺失值更改为零。

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

现在我只需要循环完成这项工作!

于 2010-05-15T16:41:13.687 回答