2017-06-22 10 views
0

私は、各データセットに対して、各グループの行数を見つけるために、複数のデータセット(各セルがティブルであるティブル)をネストする親データセットを持っています。単一のデータセットを使用する標準的な方法は、単にgroup_by(var) %>% mutate(nrow=n())を実行することです。dplyr + purr:n()はローカルグループではなくmap()グループを指しますか?

しかし、今、私はmap()呼び出しで複数のデータセットのためにこれを行うこと、それはn()呼び出しのように見えますがgroup_byによって作られた私のローカルデータセット内の(暗黙的)、map()ではない作られたグループ分け明示的なグループを指し?

1つのデータセットの標準的な方法、n()リターン50:データセットの

iris %>% 
    group_by(., Species) %>% 
    mutate(nrow=n()) 

データセット:

df <- data_frame(name=c("a", "b"), Data=list(iris, iris)) 
df2 <- df %>% 
      mutate(Data2=map(Data, ~group_by(., Species) %>% 
       mutate(nrow=n()) %>% 
       ungroup())) 

が、今n()は2を返さ?バージョン0.7.0以降で利用可能

df2[1,]$Data2[[1]] 
+0

データセット:map()と競合し、とにかくコードを簡素化していないだろうadd_count()、?それは何ですか? – Masoud

+0

結果として何が欲しいですか? – HubertL

答えて

2

あなたがmutateの外で関数を定義した場合、それが正常に動作します(私は、この出力は、あなたの心に持っているものであると仮定...)

fun <- function(x) { 
    df <- group_by(x, Species) %>% 
    summarise(nrow = n()) 
} 
df2 <- df %>% 
    mutate(Data2=map(Data, fun)) 

df2$Data2 
# [[1]] 
# # A tibble: 3 x 2 
# Species nrow 
# <fctr> <int> 
# 1  setosa 50 
# 2 versicolor 50 
# 3 virginica 50 
# 
# [[2]] 
# # A tibble: 3 x 2 
# Species nrow 
# <fctr> <int> 
# 1  setosa 50 
# 2 versicolor 50 
# 3 virginica 50 
+1

よく見つかる!実際、バグhttps://github.com/tidyverse/dplyr/issues/2080とhttps://github.com/tidyverse/dplyr/issues/2623で参照されています。ありがとう! – Matifou

0

別のオプションは、使用することですデータセットの

# standard case: 
iris %>% 
    add_count(Species) 

## df of df: 
df2 <- df %>% 
    mutate(Data2=map(Data, ~add_count(., Species))) 
関連する問題