[英]How to obtain a new table after filtering only one column in an existing table in R?
我有一个包含20列的数据框。 我需要过滤/去除一列中的噪音。 使用卷积函数过滤后,我得到了一个新的值向量。 由于过滤过程,原始列中的许多值变为NA。 问题是,我只需要整个表(以供以后分析),其中仅那些过滤后的列具有值的行,但由于两者的行数不同,我无法将过滤后的列绑定到原始表。 让我举例说明在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)
age列和age2列的行数分别为35和15。 原始数据集还有2列,我也喜欢使用它们。 现在,我只需要每列15行,对应于age2列的15行。 此处的过滤器从age列中删除了前十个值和后十个值。 如何以所有列和已过滤行都被截断的数据集的方式应用过滤器?
您将需要弄清楚变量如何排列。 如果可以将NA添加到age2,然后执行Orange $ age2 <-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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.