首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >na.locf删除引导NAs,保留其他

na.locf删除引导NAs,保留其他
EN

Stack Overflow用户
提问于 2016-03-21 09:26:34
回答 2查看 1.1K关注 0票数 1

关于na.locf包中的zoo函数,我有一个问题。在下面的数据框架内,我想删除主要的NAs (1987年、1988年),但保留前一年(1993年)的有效值。

代码语言:javascript
复制
Year     X
1987     NA
1988     NA
1989     2
1990     5
1991     9
1992     16
1993     NA
1994     27
1995     36

有谁能解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-21 09:47:16

na.locf被设计用来填充缺失的观测,而不是移除它们。动物园包还有一个na.trim函数,它删除了引导和/或跟踪观察:

代码语言:javascript
复制
na.trim(mydf)

这意味着:

代码语言:javascript
复制
> na.trim(mydf)
  Year  X
3 1989  2
4 1990  5
5 1991  9
6 1992 16
7 1993 NA
8 1994 27
9 1995 36

使用sides参数,您可以选择只删除前导或尾随缺失的观测,或者两者都删除。例如,使用sides = 'right'只会删除跟踪丢失的观测,并保持领先的缺失观测:

代码语言:javascript
复制
> na.trim(mydf, sides = 'right')
  Year  X
1 1987 NA
2 1988 NA
3 1989  2
4 1990  5
5 1991  9
6 1992 16
7 1993 NA
8 1994 27
9 1995 36

因此,使用sides = 'left'只会删除前导丢失的观测,并保持跟踪丢失的观测:

代码语言:javascript
复制
> na.trim(mydf, sides = 'left')
   Year  X
3  1989  2
4  1990  5
5  1991  9
6  1992 16
7  1993 NA
8  1994 27
9  1995 36
10 1996 NA

使用的数据:

代码语言:javascript
复制
mydf <- structure(list(Year = 1987:1996, X = c(NA, NA, 2L, 5L, 9L, 16L, NA, 27L, 36L, NA)),
                  .Names = c("Year", "X"), class = "data.frame", row.names = c(NA,-10L))
票数 7
EN

Stack Overflow用户

发布于 2016-03-21 09:36:05

假设您的数据框架的名称是'df‘。

将所有NA转换为无效的数字,例如-1。

代码语言:javascript
复制
df$X[is.na(df$X)] <- -1

现在执行运行长度编码,并删除运行长度为-1s大于1的观测值。

代码语言:javascript
复制
rle(df$X)
Run Length Encoding
  lengths: int [1:5] 2 1 1 ...
  values : num [1:5] -1 2 5 ...
df$runs <- rep(rle(df$X)$lengths,rle(df$X)$lengths)

data2 <- df[!(df$X==-1 & df$runs > 1) , ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36127168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档