因此,我搜索了如何將 NA 與 DataFrame 中特定列的前一個值和下一個值的平均值交換的答案。但是我沒有找到一個答案來說明如何在基礎 R 上執行此操作,并且 NA 可以彼此相鄰。
資料框:
name number
1 John 56
2 Garry NA
3 Carl 70
4 Doris 96
5 Wendy NA
6 Louis NA
7 Becky 40
許愿輸出:
name number
1 John 56
2 Garry 63
3 Carl 70
4 Doris 96
5 Wendy 68
6 Louis 68
7 Becky 40
uj5u.com熱心網友回復:
在 Base R 中,您可以執行以下操作:
idx <- is.na(df$number)
df$number[idx] <- 0
b <- with(rle(df$number), rep(stats::filter(values, c(1,0,1)/2), lengths))
df$number[idx] <- b[idx]
df
name number
1 John 56
2 Garry 63
3 Carl 70
4 Doris 96
5 Wendy 68
6 Louis 68
7 Becky 40
uj5u.com熱心網友回復:
within(df1, number.fill <-
rowMeans(cbind(ave(number, cumsum(!is.na(number)),
FUN=function(x) x[1]),
rev(ave(rev(number), cumsum(!is.na(rev(number))),
FUN=function(x) x[1])))))
#> name number number.fill
#> 1 John 56 56
#> 2 Garry NA 63
#> 3 Carl 70 70
#> 4 Doris 96 96
#> 5 Wendy NA 68
#> 6 Louis NA 68
#> 7 Becky 40 40
資料:
read.table(text = "name number
John 56
Garry NA
Carl 70
Doris 96
Wendy NA
Louis NA
Becky 40",
header = T, stringsAsFactors = F) -> df1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466680.html
下一篇:通過反轉級別重新排列資料幀多級列
