2017-08-01 60 views
1

上下文:我想將累計和列添加到名爲words_uni的tibble中。我用庫(dplyr),函數mutate。 我有R版本3.4.1工作64位 - 視窗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'分組。 –

+0

@AndrewBrēza感謝您的評論。我在前一個命令中按類型進行了分組,以獲取每個單詞的頻率。但是,我並沒有意識到這種情況正在影響cumsum功能。 – Sergio

回答

4

您必須先按類型對tibble進行分組。這會導致您的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