2017-08-01 19 views
1

コンテキスト:私は累計和の列をwords_uniという名前に追加します。私はライブラリ(dplyr)を使用して、mutate関数を使用しました。 私はRのバージョン3.4.1 64ビットで動作する - その後、私は次のようやったのWindows 10とRStudioバージョン1.0.143珍しい:cumsumはdplyrで作業していません

> head(words_uni) 
# A tibble: 6 x 3 
# Groups: Type [6] 
Type Freq   per 
<chr> <int>  <dbl> 
1 the 937839 0.010725848 
2  i 918552 0.010505267 
3 to 788892 0.009022376 
4  a 615082 0.007034551 

> words_uni1 = words_uni %>% 
         mutate(acum= cumsum(per)) 
> head(words_uni1) 
# A tibble: 6 x 4 
# Groups: Type [6] 
Type Freq   per  acum 
<chr> <int>  <dbl>  <dbl> 
1 the 937839 0.010725848 0.010725848 
2  i 918552 0.010505267 0.010505267 
3 to 788892 0.009022376 0.009022376 
4  a 615082 0.007034551 0.007034551 

問題:それは何私がやっていませんが期待していた、なぜ私は見ることができません。

ご意見ありがとうございます。前もって感謝します。

+1

なぜデータフレームをグループ化していますか?これは 'Type'でグループ化されています。あなたのコメントのために@AndrewBrē[email protected] –

+0

@ありがとう。私は前のコマンドでタイプ別にグループ化し、1単語あたりの頻度を取得しました。しかし、私はこの状況が累積関数に影響していることに気づいていませんでした。 – Sergio

答えて

4

以前にタイプごとにチブルをグループ化しておく必要があります。これにより、mutateコールがタイプによって計算されます。ここで

は、いくつかの再現性のあるコードです:

require(readr) 
require(dplyr) 

x <- read_csv("type, freq, per 
the, 937839, 0.010725848 
i, 918552, 0.010505267 
to, 788892, 0.009022376 
a, 615082, 0.007034551") 


### ungrouped tibble, desired results 
x %>% mutate(acum = cumsum(per)) 

# A tibble: 4 x 4 
type freq   per  acum 
<chr> <int>  <dbl>  <dbl> 
1 the 937839 0.010725848 0.01072585 
2  i 918552 0.010505267 0.02123112 
3 to 788892 0.009022376 0.03025349 
4  a 615082 0.007034551 0.03728804 

### grouped tibble 
x %>% group_by(type) %>% mutate(acum = cumsum(per)) 

# A tibble: 4 x 4 
# Groups: type [4] 
type freq   per  acum 
<chr> <int>  <dbl>  <dbl> 
1 the 937839 0.010725848 0.010725848 
2  i 918552 0.010505267 0.010505267 
3 to 788892 0.009022376 0.009022376 
4  a 615082 0.007034551 0.007034551 

あなたは単にあなたのデータのグループ化を解除する必要があります。

word_uni %>% ungroup() %>% mutate(acum = cumsum(per)) 

このトリックを行う必要があります。

+0

ありがとう@Beauデータのグループを解除する必要があるかどうかわかりませんでした。それは完璧に動作します! – Sergio

関連する問題