使用group_by和汇总时出现重复的行

时间:2015-05-15 15:02:35

标签: r data.table dplyr

我有一个数据表,当使用与group_by结合的汇总函数时,我得到重复的行。

我将简要介绍一下我的问题。 首先,我使用group_by和mutate为每个id添加'value'的总和。

dt <- data.table(id = rep(1:5, each=10), cpc = rep((0.1*seq(5)), each=2), value = 1:50)

dt2 <- dt %>%
  group_by(id) %>%
  mutate(SumValue = sum(value))


Source: local data table [50 x 4]

   id cpc value SumValue
1   1 0.1     1       55
2   1 0.1     2       55
3   1 0.2     3       55
4   1 0.2     4       55
5   1 0.3     5       55
6   1 0.3     6       55
7   1 0.4     7       55
8   1 0.4     8       55
9   1 0.5     9       55
10  1 0.5    10       55
.. .. ...   ...      ...
到目前为止,没有错。 但在那之后,当我为每个id,cpc组合和使用汇总做group_by时,输出并不像我预期的那样。 数字是正确的,但有重复的行。

dt2 %>%
  group_by(id, cpc) %>%
  summarise(count = n(), SumValue = SumValue)

Source: local data table [50 x 4]
Groups: id

   id cpc count SumValue
1   1 0.1     2       55
2   1 0.1     2       55
3   1 0.2     2       55
4   1 0.2     2       55
5   1 0.3     2       55
6   1 0.3     2       55
7   1 0.4     2       55
8   1 0.4     2       55
9   1 0.5     2       55
10  1 0.5     2       55
.. .. ...   ...      ...

使用unique()会得到所需的结果,但我认为这不是必需的。

dt2 %>%
  group_by(id, cpc) %>%
  summarise(count = n(), SumValue = SumValue) %>%
  unique()

Source: local data table [25 x 4]
Groups: id

   id cpc count SumValue
1   1 0.1     2       55
2   1 0.2     2       55
3   1 0.3     2       55
4   1 0.4     2       55
5   1 0.5     2       55
6   2 0.1     2      155
7   2 0.2     2      155
8   2 0.3     2      155
9   2 0.4     2      155
10  2 0.5     2      155
.. .. ...   ...      ...

我认为group_by在add = FALSE时设置了组,所以我不知道为什么重复的行会出现。

2 个答案:

答案 0 :(得分:2)

我不确定确切的问题,但是当您将向量分配给汇总变量时,通常需要选择向量的一个元素。所以在这种情况下你需要选择&#34; SumValue&#34;的值。分配给汇总的&#34; SumValue&#34;。我通常只使用变量[1]来做这个,但第一个(变量)可能会更好。这会为您提供您正在寻找的结果吗?

dt <- data_frame(id = rep(1:5, each=10), 
                 cpc = rep((0.1*seq(5)), each=10), 
                 value = 1:50)
dt2 <- dt %>%
  group_by(id) %>%
  mutate(SumValue = sum(value))
dt2

dt2 %>%
  group_by(id, cpc) %>%
  summarise(count = n(), SumValue = first(SumValue))

答案 1 :(得分:0)

尝试以这种方式使用unique。不确定这是否有帮助。

R> df <- data.frame(a=c(1,2,3,4,3,2), b=c(4,5,6,6,4,3)) 
R> unique(unlist(df)) 
[1] 1 2 3 4 5 6