删除 "outer rows" 以允许插值(并防止外推)
Removing "outer rows" to allow for interpolation (and prevent extrapolation)
我已经(左)按国家年份加入了两个数据框。
df<- left_join(df, df2, by="country-year")
导致以下示例输出:
country country-year a b
1 France France2000 NA NA
2 France France2001 1000 1000
3 France France2002 NA NA
4 France France2003 1600 2200
5 France France2004 NA NA
6 UK UK2000 1000 1000
7 UK UK2001 NA NA
8 UK UK2002 1000 1000
9 UK UK2003 NA NA
10 UK UK2004 NA NA
我最初想删除所有添加的列 (a,b) 都是 NA 的值。
df<-df[!is.na( df$a | df$b ),]
但是,在第二种情况下,我决定对我拥有的数据进行插值(但不是外推)。因此,我想删除所有无法插入的列;在示例中:
1 France France2000 NA NA
5 France France2004 NA NA
9 UK UK2003 NA NA
10 UK UK2004 NA NA
我相信有两种选择。首先我以某种方式调整这个函数:
library(tidyerse)
TRcomplete<-TRcomplete%>%
group_by(country) %>%
mutate_at(a:b,~na.fill(.x,"extend"))
仅插值,然后移除然后应用 df<-df[!is.na( df$a | df$b ),]
或者我写一个代码先删除 "outer" 列,然后像平常一样使用 extend
。期望的输出:
country country-year a b
2 France France2001 1000 1000
3 France France2002 1300 1600
4 France France2003 1600 2200
6 UK UK2000 1000 1000
7 UK UK2001 0 0
8 UK UK2002 1000 1000
有什么建议吗?
na.fill 中有选项可以指定完成的操作。如果你看?na.fill
,你看到fill可以指定left,interior和right,所以如果你指定left和right是NA
,interior是"extend"
,那么它会只填写内部数据。然后,您可以 filter
具有 NA
的行。
library(tidyverse)
library(zoo)
df %>%
group_by(country) %>%
mutate_at(vars(a:b),~na.fill(.x,c(NA, "extend", NA))) %>%
filter(!is.na(a) | !is.na(b))
顺便说一下,你的 library(tidyverse)
语句中有错字;你错过了 v.
我已经(左)按国家年份加入了两个数据框。
df<- left_join(df, df2, by="country-year")
导致以下示例输出:
country country-year a b
1 France France2000 NA NA
2 France France2001 1000 1000
3 France France2002 NA NA
4 France France2003 1600 2200
5 France France2004 NA NA
6 UK UK2000 1000 1000
7 UK UK2001 NA NA
8 UK UK2002 1000 1000
9 UK UK2003 NA NA
10 UK UK2004 NA NA
我最初想删除所有添加的列 (a,b) 都是 NA 的值。
df<-df[!is.na( df$a | df$b ),]
但是,在第二种情况下,我决定对我拥有的数据进行插值(但不是外推)。因此,我想删除所有无法插入的列;在示例中:
1 France France2000 NA NA
5 France France2004 NA NA
9 UK UK2003 NA NA
10 UK UK2004 NA NA
我相信有两种选择。首先我以某种方式调整这个函数:
library(tidyerse)
TRcomplete<-TRcomplete%>%
group_by(country) %>%
mutate_at(a:b,~na.fill(.x,"extend"))
仅插值,然后移除然后应用 df<-df[!is.na( df$a | df$b ),]
或者我写一个代码先删除 "outer" 列,然后像平常一样使用 extend
。期望的输出:
country country-year a b
2 France France2001 1000 1000
3 France France2002 1300 1600
4 France France2003 1600 2200
6 UK UK2000 1000 1000
7 UK UK2001 0 0
8 UK UK2002 1000 1000
有什么建议吗?
na.fill 中有选项可以指定完成的操作。如果你看?na.fill
,你看到fill可以指定left,interior和right,所以如果你指定left和right是NA
,interior是"extend"
,那么它会只填写内部数据。然后,您可以 filter
具有 NA
的行。
library(tidyverse)
library(zoo)
df %>%
group_by(country) %>%
mutate_at(vars(a:b),~na.fill(.x,c(NA, "extend", NA))) %>%
filter(!is.na(a) | !is.na(b))
顺便说一下,你的 library(tidyverse)
语句中有错字;你错过了 v.