2016-05-20 3 views
2

を要約するために複数の異なるGROUP_BY変数(dplyr)を使用して、私は6列が含まれているデータフレーム「my_data」を持っている:にデータフレーム

group1.members group2.members group3.members price price.2 price.3 
1     1    1    800  877  334 
1     2    1    850  877  334 
2     2    1    859  877  334 
3     1    1    859  877  334 
3     1    2    870  877  334 
2     2    2    870  877  334 
2     3    2    870  877  334 
1     3    3    880  877  334 

私はROWでまとめたいと思い、my_dataの「価格」の列group_byをそれぞれ別のgroup.memberカラムで使用して、いくつかの別々のデータフレームを作成します。しかし、group_byはこれを許可していないのでしょうか?言い換えれば

my_data <- as.data.frame(data) 
num_of_years <- c(1,2,3) 
for(i in 1:length(num_of_years)){ 
    price_means <- my_data %>% group_by(my_data[i]) %>% 
    select(-value) %>% 
    summarise_each(funs(mean(., na.rm=TRUE))) %>% 
    ungroup 
    assign(paste("PriceMeans",i,sep=""),price_means, envir = .GlobalEnv) 
} 

:I = 1、使用GROUP_BYため

  • (group1.members)は、i = 2、使用のために
  • この

    は私が考えていたものですGROUP_BY(group2.members)は、i = 3、使用GROUP_BYため
  • (group3.members)

EDIT:以下の私の解決

for(i in 1:length(my_groups)){ 
    # construct the group to select 
    current.group <- my_groups[i] 
    current.group <- paste0("memb_", current.group) 
    # construct the groups to exclude 
    groups.to.drop <- my_groups[-i] 
    groups.to.drop <- paste0("memb_", groups.to.drop) 

    # Get Means 
    Means <- data %>% group_by_(as.name(current.group)) %>% 
    select(- c(ID, get(groups.to.drop))) %>% 
    summarise_each(funs(mean(., na.rm = TRUE))) 
    Means <- Means[,-1:-(length(my_groups)-1)] 
    Means <- as.list(Means) 
    assign(x = paste0("Means_",i), 
     value = Means, 
     envir = parent.env(new.env()) 
} 
+0

あなたが執筆のlazyeval方法を使用する必要がありますあなたの機能。 – theArun

+0

ありがとう!私はlazyevalのドキュメントを見ましたが、これを実装する方法を理解していませんでした。おそらく短い例を提供できますか? – wsp1morlet

+0

この特定のリンクは、lazyevalがdplyrライブラリ[link](https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html)によって処理される方法を説明しています – theArun

答えて

1

私は決してdplyr専門家ではなく、これはあなたがやろうとしているものを達成するためのようだ:

for (i in 1:length(num_of_years)){ 
    var1 <- names(my_data)[[i]] 
    var2 <- c(var1) 

    price_means <- my_data %>% 
    select(eval(i), price, price.2, price.3) %>% 
    group_by_(var2) %>% 
    summarise_each(funs(mean(., na.rm=TRUE))) %>% 
    ungroup() 

    assign(paste("PriceMeans",i,sep=""),price_means, envir = .GlobalEnv) 
} 
+0

ありがとう、これは非常に役に立ちました。最後に私はかなり似たようなものを使っていました(上記の私の質問を参照) – wsp1morlet