如何在仅过滤R中现有表中的一列后获取新表?

时间:2014-02-13 06:58:43

标签: r filter convolution

我的数据框有20列。我需要过滤/去除一列的噪音。使用convolve函数进行过滤后,我得到一个新的值向量。由于过滤过程,原始列中的许多值变为NA。问题是我需要整个表(以后的分析)只有那些过滤列有值的行,但我不能将过滤的列绑定到原始表,因为两者的行数不同。让我来说明使用R:

中'Orange'数据集中的'age'列
> head(Orange)
  Tree  age circumference
1    1  118            30
2    1  484            58
3    1  664            87
4    1 1004           115
5    1 1231           120
6    1 1372           142

使用Convolve过滤器

smooth <- function (x, D, delta){
z <- exp(-abs(-D:D/delta))
r <- convolve (x, z, type='filter')/convolve(rep(1, length(x)),z,type='filter')
r <- head(tail(r, -D), -D)
r
}

过滤'年龄'列

age2 <- smooth(Orange$age, 5,10)
data.frame(age2)

age column和age2列的行数分别为35和15。原始数据集还有2个列,我也喜欢使用它们。现在,我只需要15行每列对应15行age2列。此处的过滤器从年龄列中删除了第一个和最后十个值。如何以一种包含所有列和已过滤行的截断数据集的方式应用过滤器?

1 个答案:

答案 0 :(得分:0)

您需要弄清楚变量如何排列。如果您可以将NA添加到age2,然后执行Orange $ age2&lt; - age2,然后是na.omit(Orange),那么您应该拥有所需的内容。或者,等价地,也许这就是你要找的东西?

df <- tail(head(Orange, -10), -10)    # chop off the first and last 10 observations
df$age2 <- age2
df

   Tree  age circumference      age2
11    2 1004           156  915.1678
12    2 1231           172  876.1048
13    2 1372           203  841.3156
14    2 1582           203  911.0914
15    3  118            30  948.2045
16    3  484            51 1008.0198
17    3  664            75  955.0961
18    3 1004           108  915.1678
19    3 1231           115  876.1048
20    3 1372           139  841.3156
21    3 1582           140  911.0914
22    4  118            32  948.2045
23    4  484            62 1008.0198
24    4  664           112  955.0961
25    4 1004           167  915.1678

编辑:如果你知道第一个和最后一个x观察将被删除,那么以下工作:

x <- 2
df <- tail(head(Orange, -x), -x)     # chop off the first and last x observations 
df$age2 <- age2