簡體   English   中英

使用多個不同的group_by變量(dplyr)來匯總數據幀

[英]Using multiple different group_by variables (dplyr) to summarise a dataframe

我有一個數據框“my_data”,其中包含6列:

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.member”列上使用group_by。 看來,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)

編輯:我的解決方案:

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()) 
}

我絕不是一個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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM