Ale*_*lex 3 r mean missing-data
我对R比较新,遇到了一些问题.我正在使用某些年份缺少值的数据框.例如:
year var1 var2
1972 1.3 1.4
1973 1.6 2.8
1974 2.0 1.5
1975 NA NA
1976 1.5 2.1
1977 NA NA
1978 1.9 1.1
Run Code Online (Sandbox Code Playgroud)
对于每个NA,我想取上一行和下一行的平均值.因此1975年的var1和var2应分别为1.75和1.8.1977年他们应该是1.7和1.6.有任何想法吗?
你可以na.approx在包中使用zoo:
library(zoo)
df$var1 <- na.approx(df$var1)
df$var2 <- na.approx(df$var2)
##
> df
year var1 var2
1 1972 1.30 1.4
2 1973 1.60 2.8
3 1974 2.00 1.5
4 1975 1.75 1.8
5 1976 1.50 2.1
6 1977 1.70 1.6
7 1978 1.90 1.1
Run Code Online (Sandbox Code Playgroud)
正如@Jilber指出的那样,这可以更简洁地完成
df <- sapply(df, na.approx)
Run Code Online (Sandbox Code Playgroud)根据@Richard Scriven的评论,您可能希望保留
data.frame该类
df[-1] <- lapply(df[-1], na.approx)
Run Code Online (Sandbox Code Playgroud)
要么
df[-1] <- vapply(df[-1], na.approx, numeric(nrow(df)))
Run Code Online (Sandbox Code Playgroud)数据:
df <- read.table(
text="year var1 var2
1972 1.3 1.4
1973 1.6 2.8
1974 2.0 1.5
1975 NA NA
1976 1.5 2.1
1977 NA NA
1978 1.9 1.1",
header=TRUE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |