2016-04-23 36 views
-1

比方說,我有一個data.framedplyr樣行操作

A B C 
x q 4 
x p 2 
y q 0 
y p 8 

我想B==q選擇所有行和計算C相應的平均值並將其添加爲一個額外的一行比方說A==zB==oC剛纔的平均值。

這基本上是dplyr與列做的事情,但應用於行。我的問題是這樣的:有什麼辦法可以應用dplyr操作而不是行上的列?當然,更好的做法是使用類似dplyr的行處理程序包。

(我的實際data.frame包含了更多的行和列的課程)

問候

+0

您能否顯示基於此i的預期輸出NPUT? – Heroka

+0

根據您的描述,您在這裏沒有按行操作。 C的平均值僅僅是一個法向量的均值。如果你想按組來做到這一點,請參閱'group_by'。如果你想要一個子集,請參閱'filter'。最終你可能需要'rbind'或'bind_rows'。 –

+0

換句話說,這個'rbind(df,data.frame(A ='z',B ='o',C = mean(df $ C [df $ B =='q'])))'? – Sotos

回答

0

做到這一點使用dplyr的方法如下:

df <- read.table(header = TRUE, 
text = "A B C 
    x q 4 
    x p 2 
    y q 0 
    y p 8") 

library(dplyr) 

df %>% bind_rows(df %>% 
       filter(B=="q") %>% 
       summarize(C = mean(C)) %>% 
       mutate(A = "z", B = "o") 
      ) 
+0

完美!正是我在找什麼。謝謝! –

0

我會說使用group_by並在dplyr中總結功能

df %>% group_by (B) %>% group_by(A) %>% summaries(mean(C))