我的数据框有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
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列。此处的过滤器从年龄列中删除了第一个和最后十个值。如何以一种包含所有列和已过滤行的截断数据集的方式应用过滤器?
答案 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