用于特定值的MS Power Query / Power BI中的Groupby

时间:2016-12-14 12:14:57

标签: r powerbi powerquery powerbi-embedded

我的数据看起来像

    Name  country  Group   Date      Score
      a      UK    IT     18/11/2016    1
      a      UK    IT     19/11/2016   -1
      a      UK    IT     20/11/2016    2
      a      UK    IT     21/11/2016    2
      a      UK    IT     22/11/2016    NA
      a      UK    IT     23/11/2016    NA
      a      UK    IT     24/11/2016    NA
      a      UK    IT     25/11/2016    NA
      a      UK    IT     26/11/2016    NA
      b      UK    VK     18/11/2016    1
      b      UK    VK     19/11/2016   -1
      b      UK    VK     20/11/2016    1
      b      UK    VK     21/11/2016    1
      b      UK    VK     22/11/2016    1
      b      UK    VK     23/11/2016   -2
      b      UK    VK     24/11/2016    2
      b      UK    VK     25/11/2016    1
      b      UK    VK     26/11/2016   -1

我做了一个Group By操作,根据电源查询(Power BI)中的“名称”,“国家/地区”,“组”列对得分列进行平均,然后数据看起来像

   Name  country  Group   Average Score
      a      UK    IT        0.44
      b      UK    VK        0.33

但是,如果每个人的分数栏中有> = 4 Na,那么我试图将平均分数设为“NA”

   Name  country  Group   Average Score
      a      UK    IT        NA
      b      UK    VK        0.33

我找不到直接使用Group的解决方案,任何想法或建议? (Power BI还支持R,可以实现这一目的的任何转换吗?)提前感谢。

1 个答案:

答案 0 :(得分:2)

这可以通过dplyr完成,如下所示。

library(dplyr)

df  <- read.table(text = "Name  country  Group   Date      Score
a      UK    IT     18/11/2016    1
a      UK    IT     19/11/2016   -1
a      UK    IT     20/11/2016    2
a      UK    IT     21/11/2016    2
a      UK    IT     22/11/2016    NA
a      UK    IT     23/11/2016    NA
a      UK    IT     24/11/2016    NA
a      UK    IT     25/11/2016    NA
a      UK    IT     26/11/2016    NA
b      UK    VK     18/11/2016    1
b      UK    VK     19/11/2016   -1
b      UK    VK     20/11/2016    1
b      UK    VK     21/11/2016    1
b      UK    VK     22/11/2016    1
b      UK    VK     23/11/2016   -2
b      UK    VK     24/11/2016    2
b      UK    VK     25/11/2016    1
b      UK    VK     26/11/2016   -1", 
                  header = TRUE)

pivot <- df %>%
  group_by(Name, country, Group) %>%
  summarise(avg_score = ifelse(sum(is.na(Score)) >= 4, NA, mean(Score)))

> pivot
Source: local data frame [2 x 4]
Groups: Name, country [?]

    Name country  Group avg_score
  <fctr>  <fctr> <fctr>     <dbl>
1      a      UK     IT        NA
2      b      UK     VK 0.3333333