繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM