2017-03-15 155 views
-1

我很難找到我正在嘗試做什麼的答案/示例,如下所示: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和Obst 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 

非常感謝!

回答

0

您可以使用group_bysummarise從包裝dplyr

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 
+0

感謝@HubertL!這就是絆倒了我 - group_by()部分。我很樂意接受幾個人給我的低估 - 我意識到自己很快就解決了這個問題! – soitgoes

+0

爲了避免downvotes,最好以機器可讀的格式提供數據(而不是用戶可讀的格式)。太重要的是添加你的(不工作的)代碼 – HubertL