使用dplyr" group_by"和#34; mutate",如果我理解正确,数据帧根据group_by参数分成不同的子数据帧。例如,使用以下代码:
set.seed(7)
df <- data.frame(x=runif(10),let=rep(letters[1:5],each=2))
df %>% group_by(let) %>% mutate(mean.by.letter = mean(x))
mean()连续应用于5个sub-dfs的列x,对应于&amp;之间的字母。即
所以你可以操纵sub-dfs的列,但是你可以自己访问sub-dfs吗?令我惊讶的是,如果我尝试:
set.seed(7)
data <- data.frame(x=runif(10),let=rep(letters[1:5],each=2))
data %>% group_by(let) %>% mutate(mean.by.letter = mean(.$x))
结果不同。从这个结果,人们可以推断出&#34;。&#34; df并不代表sub-dfs,而只是&#34;数据&#34;一个(group_by函数doens&t; t更改任何东西) 原因是我想使用一个stat函数,它将数据帧作为每个sub-dfs的参数。 谢谢!
答案 0 :(得分:8)
我们可以在public class FifoMap extends LinkedHashMap<String, String> {
int max;
/**
*
*/
private static final long serialVersionUID = 1L;
public FifoMap (int max){
super(max + 1);
this.max = max;
}
@Override
public String put (String key, String value) {
String forReturn = super.put(key, value);
if (super.size() > max){
removeEldest();
}
return forReturn;
}
private void removeEldest() {
Iterator <String> iterator = this.keySet().iterator();
if (iterator.hasNext()){
this.remove(iterator.next());
}
}
}
do
答案 1 :(得分:1)
自 dplyr 0.8 起,您可以使用group_map
,因此.
调用中的group_map
将代表sub-data.frame。
library(dplyr)
df %>%
group_by(let ) %>%
group_map(~mutate(., mean.by.letter = mean(x)))
#> # A tibble: 10 x 3
#> # Groups: let [5]
#> let x mean.by.letter
#> <fct> <dbl> <dbl>
#> 1 a 0.989 0.693
#> 2 a 0.398 0.693
#> 3 b 0.116 0.0927
#> 4 b 0.0697 0.0927
#> 5 c 0.244 0.518
#> 6 c 0.792 0.518
#> 7 d 0.340 0.656
#> 8 d 0.972 0.656
#> 9 e 0.166 0.312
#> 10 e 0.459 0.312
在此处查找有关group_map
和其他新功能的更多信息:
https://www.tidyverse.org/articles/2019/02/dplyr-0-8-0/ https://www.tidyverse.org/articles/2018/12/dplyr-0-8-0-release-candidate/