2015-09-01 145 views
3

所以這裏是問題:我想在我的R代碼中使用for循環來總結不同的列。dplyr和for循環在r

舉個例子,在這裏它可以是什麼樣子:

all.columns<-c("column4","column5","column6","column7") 
for (i in 1:4) { 
df%>% 
group_by(column3)%>% 
summarise(Mean=mean(all.columns[i]), 
      Max=max(all.columns[i])) 
} 

其中df是一個數據幀,欄3可以是一組由年變,和列5到7,我要檢查的那些重複使用相同的代碼。

你知道如何用dplyr執行這個嗎?如果你沒有dplyr的替代品,我想聽聽它。

我試圖把列的角色名,但它不工作...

+0

也許在結尾添加'%>%print'。我不清楚你想要做什麼。示例數據可能有幫助。 – Frank

+0

請添加一些符合您想到的結構的示例數據,並且理想情況下是所需輸出的示例。因爲我不知道你的分組變量是否在行中重複,如果你必須處理缺失值等。 – ulfelder

+1

你想要的輸出是什麼?你想要對象,每個列的摘要有一個數據框?使用字符串列名稱,您將需要使用標準評估'彙總_()'...這是[主題的整體小插曲](https://cran.rstudio.com/web/packages/dplyr/vignettes/ nse.html)。或者,也許可以查看一下'summarize_each'並獲得一個沒有任何循環的大概要數據框架。 – Gregor

回答

5

如何:

假數據:

df <- data.frame(column3=rep(letters[1:2], 10), 
       column4=rnorm(20), 
       column5=rnorm(20), 
       column6=rnorm(20), 
       column7=rnorm(20)) 

dplyr解決方案:

library(dplyr) 
df %>% 
    group_by(column3) %>% 
    summarise_each(funs(mean, max), column4:column7) 

輸出:

Source: local data frame [2 x 9] 

    column3 column4_mean column5_mean column6_mean column7_mean column4_max column5_max 
1  a  0.186458 0.02662053 -0.00874544 0.3327999 1.563171 2.416697 
2  b  0.336329 -0.08868817 0.31777871 0.1934266 1.263437 1.142430 
Variables not shown: column6_max (dbl), column7_max (dbl) 
+0

這真是太棒了!謝謝。正是我在尋找的東西! –

0

,因爲你打電話的列名,如果他們的對象,當你有他們這不起作用存儲爲字符。

我知道這可以用data.table做到:

dt = data.table(df) 
dt[, lapply(.SD, function(x) data.table(mean(x), max(x))), 
    by = column3, .SDcols = all.columns]