Select一组带dplyr,只做操作,不保存选区
Select a group with dplyr, only for the operation, without saving the selection
我想select一部分数据dplyr
进行操作,但是没有保存操作过的selection出去。我的数据库如下所示:
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 个或更少观察值的组。
我想知道我是否可以 select 在 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
有什么建议吗?
这应该有效:
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))
我想select一部分数据dplyr
进行操作,但是没有保存操作过的selection出去。我的数据库如下所示:
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 个或更少观察值的组。
我想知道我是否可以 select 在 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
有什么建议吗?
这应该有效:
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))