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 に答える