1

我的数据看起来像

    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

我根据电源查询(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 by 找到解决方案,有什么想法或建议吗?(Power BI 还支持 R,可以进行任何转换来实现这一点吗?)提前致谢。

4

1 回答 1

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
于 2016-12-14T13:23:50.617 回答