选择具有dplyr的组,仅用于操作,而不保存选择

问题描述 投票:0回答:1

我想用dplyr选择一部分数据来执行操作,但是没有它保存已经执行操作的选择。我的数据库如下所示:

   country country-year year     a     b
1  France  France2000   2000       NA    NA 
2  France  France2001   2001     1000  1000  
3  France  France2002   2002       NA    NA
4  France  France2003   2003     1600  2200
5  France  France2004   2004       NA    NA
6  UK          UK2000   2000     1000  1000  
7  UK          UK2001   2001       NA    NA
8  UK          UK2002   2002       NA    NA  
9  UK          UK2003   2003       NA    NA
10 UK          UK2004   2004       NA    NA
11 Germany     UK2000   2000       NA    NA 
12 Germany     UK2001   2001       NA    NA
13 Germany     UK2002   2002       NA    NA  
14 Germany     UK2003   2003       NA    NA
15 Germany     UK2004   2004       NA    NA

举个例子:

# I first select the group
df <- df %>% 
  group_by(country)%>% 

对于这个组,我想在有超过1次观察时进行插值(仅插值!),但我不想删除只有1次或更少观察的组。

我想知道我是否可以选择n>1的国家,并且仅针对那些小组进行操作:

mutate_at(vars(a:b),~na.fill(.x,c(NA, "extend", NA))) 

我也考虑过以下内容,但我无法正确理解语法:

mutate_if(is.numeric,~if(n()>1  NA else na.fill(.x,c(NA, "extend", NA)))

期望的结果是:

   country country-year year     a     b
1  France  France2000   2000       NA    NA 
2  France  France2001   2001     1000  1000  
3  France  France2002   2002  **1300****1600**  
4  France  France2003   2003     1600  2200
5  France  France2004   2004       NA    NA
6  UK          UK2000   2000     1000  1000  
7  UK          UK2001   2001       NA    NA
8  UK          UK2002   2002       NA    NA  
9  UK          UK2003   2003       NA    NA
10 UK          UK2004   2004       NA    NA
11 Germany     UK2000   2000       NA    NA 
12 Germany     UK2001   2001       NA    NA
13 Germany     UK2002   2002       NA    NA  
14 Germany     UK2003   2003       NA    NA
15 Germany     UK2004   2004       NA    NA

有什么建议?

r group-by dplyr fill mutate
1个回答
2
投票

这应该工作:

df %>% 
  group_by(country)%>% 
  mutate_at(vars(a:b),
           ~as.numeric(if (sum(!is.na(.x))>1)
                       na.fill(.x,c(NA,"extend",NA))
                       else .x))
© www.soinside.com 2019 - 2024. All rights reserved.