R - 从列组合中获取平均值

时间:2017-03-15 19:45:49

标签: r

我很难找到关于我正在尝试做的事情的答案/例子,其中包括:

示例数据框,其中我有值(1)以及单元格中的NA:

Obvs | Cond1 | Cond2 | Cond3 | Cond4 | Value
---------------------------------------------
1    | 1     | NA    | 1     | NA    | 3
2    | NA    | 1     | 1     | NA    | 2
3    | 1     | NA    | 1     | NA    | 9
4    | 1     | NA    | NA    | 1     | 9
5    | NA    | 1     | NA    | NA    | 7
6    | NA    | NA    | NA    | 1     | 7
7    | NA    | NA    | 1     | NA    | 10
8    | NA    | 1     | NA    | NA    | 9
9    | NA    | NA    | NA    | 1     | 4
10   | 1     | NA    | NA    | NA    | 4
11   | NA    | NA    | 1     | 1     | 3
12   | NA    | 1     | 1     | NA    | 5

我的目标是获得满足每个列组合的行的平均值,其值为(即值1)。例如,Obvs 1和3中的观察值都在Cond1和Cond3中有值,而其他Cond cols是NA,所以我想创建一个单独的列来保存这两个Obvs值的平均值。因此输出将如下所示,它显示数据集中可用的所有Cond组合的平均值。 R有没有办法优雅地找到所有这些组合(没有我手动指定它们)并吐出平均值,如果它满足特定组合?这将适用于需要考虑更多列的大型数据集。

Cond1 | Cond2 | Cond3 | Cond4 | Avg_Value
1     | NA    | 1     | NA    | 6
NA    | 1     | 1     | NA    | 3.5
1     | NA    | NA    | 1     | 9
NA    | 1     | NA    | NA    | 8
NA    | NA    | NA    | 1     | 5.5
NA    | NA    | 1     | NA    | 10
1     | NA    | NA    | NA    | 4
NA    | NA    | 1     | 1     | 3

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用group_by包中的summarisedplyr

df %>% 
  group_by(Cond1,Cond2,Cond3,Cond4)%>%
  summarise(Avg_Value=mean(Value))

    Cond1   Cond2   Cond3   Cond4 Avg_Value
    <chr>   <chr>   <chr>   <chr>     <dbl>
1  1       NA      1       NA           6.0
2  1       NA      NA      1            9.0
3  1       NA      NA      NA           4.0
4  NA      1       1       NA           3.5
5  NA      1       NA      NA           8.0
6  NA      NA      1       1            3.0
7  NA      NA      1       NA          10.0
8  NA      NA      NA      1            5.5