使用 group_by 和汇总时出现重复行
Duplicated rows emerging when using group_by and summarise
我有一个数据 table,当结合使用汇总函数和 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 并使用 summarise 时,输出并不像我预期的那样。
数字是正确的,但有重复的行。
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时设置了组,所以我不知道为什么会出现重复的行。
尝试以这种方式使用唯一性。不确定这是否有帮助。
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
我不确定确切的问题,但是当您将一个向量分配给汇总变量时,您通常需要选择该向量的一个元素。因此,在这种情况下,您需要选择 "SumValue" 的哪个值分配给汇总的 "SumValue"。我通常只是用 variable[1] 来做这件事,但 first(variable) 可能更好。这是否为您提供了您正在寻找的结果?
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))
我有一个数据 table,当结合使用汇总函数和 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 并使用 summarise 时,输出并不像我预期的那样。 数字是正确的,但有重复的行。
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时设置了组,所以我不知道为什么会出现重复的行。
尝试以这种方式使用唯一性。不确定这是否有帮助。
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
我不确定确切的问题,但是当您将一个向量分配给汇总变量时,您通常需要选择该向量的一个元素。因此,在这种情况下,您需要选择 "SumValue" 的哪个值分配给汇总的 "SumValue"。我通常只是用 variable[1] 来做这件事,但 first(variable) 可能更好。这是否为您提供了您正在寻找的结果?
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))