2016-02-16 44 views
1

提问生成新的观测

我想在我的数据集的变量(​​)系统地更改为“混合”其电流值之间的中介的行。通过混合现有的观察{R}

数据

我目前有5年递增的州县和人口数据。数据在数据框中。

data: 
    year  state  county   population 
1 1990  Vermont  Chittenden  4050 
2 1995  Vermont  Chittenden  4180 
3 2000  Vermont  Chittenden  4205 
4 2005  Vermont  Chittenden  4350 
5 2010  Vermont  Chittenden  4358 
6 2015  Vermont  Chittenden  4401 

使用的技术在这里找到:Change variable value based on row index {R},我申请了以下内容:

new.data <- data[rep(1:nrow(data),each=5),] 
new.data$year <- new.data$year + sequence(rep(5,nrow(data))) -1 

其结果是,我得到这个:

new.data: 
    year  state  county   population 
1 1990  Vermont  Chittenden  4050 
1.1 1991  Vermont  Chittenden  4050 
1.2 1992  Vermont  Chittenden  4050 
1.3 1993  Vermont  Chittenden  4050 
1.4 1994  Vermont  Chittenden  4050 
2 1995  Vermont  Chittenden  4180 
2.1 1996  Vermont  Chittenden  4180 
2.2 1997  Vermont  Chittenden  4180 
2.3 1998  Vermont  Chittenden  4180 
2.4 1999  Vermont  Chittenden  4180 
3 2000  Vermont  Chittenden  4205 
         ... 
5 2010  Vermont  Chittenden  4358 
5.1 2010  Vermont  Chittenden  4358 
5.2 2011  Vermont  Chittenden  4358 
5.3 2012  Vermont  Chittenden  4358 
5.4 2013  Vermont  Chittenden  4358 
6 2015  Vermont  Chittenden  4401 

但是,请注意​​没有变化一次五年。我想找出一种方法来在增量值之间“混合”中间值。它看起来是这样的:

new.data: 
    year  state  county   population 
1 1990  Vermont  Chittenden  4050 
1.1 1991  Vermont  Chittenden  4076 
1.2 1992  Vermont  Chittenden  4102 
1.3 1993  Vermont  Chittenden  4128 
1.4 1994  Vermont  Chittenden  4154 
2 1995  Vermont  Chittenden  4180 
2.1 1996  Vermont  Chittenden  4185 
2.2 1997  Vermont  Chittenden  4190 
2.3 1998  Vermont  Chittenden  4195 
2.4 1999  Vermont  Chittenden  4200 
3 2000  Vermont  Chittenden  4205 
         ... 
5 2010  Vermont  Chittenden  4358 
5.1 2011  Vermont  Chittenden  4367 
5.2 2012  Vermont  Chittenden  4376 
5.3 2013  Vermont  Chittenden  4385 
5.4 2014  Vermont  Chittenden  4394 
6 2015  Vermont  Chittenden  4401 

我该如何做到这一点?

如果需要,我很乐意发布更多信息。谢谢!

+0

看看'seq'函数。 –

+0

Hi @TimothéePoisot,你想介绍一下吗?我对R还是比较陌生的。我明白'seq'允许规定'from'和'to';然而,我不知道如何每五年重复一次。谢谢! – Yasha

回答

3

这种观察混合称为插值。有这许多的方法和简单的一种是线性插值,可以做如下:

year <- seq(1990, 2015, by = 5) 
population <- c(4050, 4180, 4205, 4350, 4358, 4401) 
approx(x = year, y = population, xout = min(year):max(year)) 
# $x 
# [1] 1990 1991 1992 1993 ... 
# 
# $y 
# [1] 4050.0 4076.0 4102.0 4128.0 4154.0 4180.0 4185.0 ... 

而且考虑检查?splines;那么得到的曲线会比使用线性插值更平滑。

+0

嗨@julius,非常感谢 - 我会试试这个。我很感激。 – Yasha