2014-02-13 29 views
0

我有一个数据框有20列。我需要过滤/去除一列中的噪音。使用卷积函数进行过滤后,我得到一个新的向量值。由于过滤过程,原始列中的许多值变为NA。问题是我需要整个表(用于以后的分析),只有那些过滤列具有值的行,但我无法将过滤列绑定到原始表,因为两者的行数不同。让我们在R SET '橙' 的数据我是在使用 '年龄' 一栏:如何在R中的现有表中仅筛选一列后获取新表?

> 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 

卷积过滤器使用

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) 

数年龄栏和age2栏的行数分别为35和15。原始数据集还有2列,我也喜欢与他们合作。现在,我只需要对应于15行age2列的每列中的15行。这里的过滤器从年龄栏中删除了第一个和最后十个值。我如何应用筛选器,以便获得包含所有列和筛选行的截断数据集?

回答

0

你需要弄清楚变量是如何排列的。如果你可以添加NA到age2,然后做Orange $ age2 < - age2然后是na.omit(橙色),你应该有你想要的。或者,等同地,也许这就是你要找的东西?

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 
+0

其实,使用卷积功能中,只有数据值,输出给无NA的后。你所建议的在这种情况下是好的,但在我的原始数据集中有几辆车在过滤之后将有前十行和后十行被移除。在Orange数据集中,这意味着对于特定类别的“树”,例如2几个值将从顶部和底部删除。这对所有类别都是重复的。我知道过滤值应该如何排列(例如,为每个树类别移除了第一个和最后2个值),但不知道如何在R –

+0

@Umair中执行此操作现在我不确定是否需要+/- 10或从df的顶部或底部移除+/- 2。看到我的答案编辑。如果这不能回答你的问题,请给出一个完整的例子和所需的输出。 – Vincent

+0

谢谢!有用。 –