【发布时间】:2017-05-22 00:08:51
【问题描述】:
我是初学者,对 R 的高级功能不太熟悉。我无法理解为什么 reduce() 不适用于 grouped_df。当数据类型为:
"tbl_df" "tbl" "data.frame"
这是示例数据:
df <- data.frame(client = rep(c("Client A","Client B", "Client C"),3),
year = rep(c(2014,2013,2012), each=3),
rev1 = rep(c(10,20,30),3),
rev2 = rep(c(10,20,30),3))
其中,class (df) 是 "tbl_df" "tbl" "data.frame"
我现在将df 转换为grouped_df 类:
df1 <- df %>%
group_by(client, year,rev1) %>%
summarise(rev3 = sum(rev1,rev2)) %>%
select(client, year, rev3, rev1)
其中,class (df1) 是 "grouped_df" "tbl_df" "tbl" "data.frame",正如预期的那样。
现在,当我使用 reduce() 对 df1 进行逐行求和时,它会引发错误。
df1%>% dplyr::mutate(sum=Reduce("+",.[3:4]))
Error: incompatible size (9), expecting 1 (the group size) or 1
但是,当我将df1 转换为数据框时,它运行良好。
df1%>% dplyr::as_data_frame() %>% dplyr::mutate(sum=Reduce("+",.[3:4]))
上面输出的head()是:
# A tibble: 6 × 5
client year rev3 rev1 sum
<fctr> <dbl> <dbl> <dbl> <dbl>
1 Client A 2012 20 10 30
2 Client A 2013 20 10 30
3 Client A 2014 20 10 30
4 Client B 2012 40 20 60
5 Client B 2013 40 20 60
6 Client B 2014 40 20 60
...
谁能解释一下为什么reduce() 函数不适用于分组数据,但适用于非分组数据?也许,我在这里遗漏了一些东西。
【问题讨论】:
-
@Sotos - 是的,这是一个错字。我要纠正这个。感谢您的帮助。