我试图将分组 tbl_df
中的值标准化,我很惊讶地发现它不起作用。然而,它确实如预期的那样与数据帧和常规(即未组合的)tbl_df
s
示例:
> df <- data.frame(year = c(1999, 2002, 2005, 2008),
LA = c(3931.120, 4273.710, 4601.415, 4101.321),
NY = c(346.82000, 134.30882, 130.43038, 88.27546))
> df
year LA NY
1 1999 3931.120 346.82000
2 2002 4273.710 134.30882
3 2005 4601.415 130.43038
4 2008 4101.321 88.27546
这些都可行:
> df %>% mutate_each_(funs(scale), vars = c('LA', 'NY'))
year LA NY
1 1999 -1.0334913 1.4757715
2 2002 0.1635942 -0.3490598
3 2005 1.3086682 -0.3823639
4 2008 -0.4387712 -0.7443478
> df_tbl <- tbl_df(df)
> df_tbl %>% mutate_each_(funs(scale), vars = c('LA', 'NY'))
Source: local data frame [4 x 3]
year LA NY
(dbl) (dbl) (dbl)
1 1999 -1.0334913 1.4757715
2 2002 0.1635942 -0.3490598
3 2005 1.3086682 -0.3823639
4 2008 -0.4387712 -0.7443478
但是一旦分组,该功能就失败了:
> df.grouped <- df %>% group_by(year)
> df.grouped %>% mutate_each_(funs(scale), vars = c('LA', 'NY'))
Source: local data frame [4 x 3]
Groups: year [4]
year LA NY
(dbl) (dbl) (dbl)
1 1999 NA NA
2 2002 NA NA
3 2005 NaN NaN
4 2008 NA NA
df.grouped %>% mutate_each(funs(scale)) # Gives the same result
我做了一些研究,显然tbl_df
永远不会简化(删除),因此始终返回data.frame。
但它并不能解释为什么未分组 tbl_df
很好,但分组不是,特别是因为?mutate_each
提及
... vars:在mutate / summarize中包含/排除的变量。您可以使用与select中相同的规格。 如果缺少,则默认为所有非分组变量。
问题
解决问题的唯一方法是将ungroup
添加到管道中,如下所示?
df.grouped %>% ungroup %>% mutate_each_(funs(scale), vars = c('LA', 'NY'))
# OR
df.grouped %>% ungroup %>% mutate_each(funs(scale))
答案 0 :(得分:0)
正如Alistaire上面指出的那样,之所以没有这样做是因为:
您无法有效地扩展单个值,这是您在对其进行分组时尝试执行的操作。
谢谢你,Alistaire!