首页 > 解决方案 > 将 na.fill 应用于每一列

问题描述

我有一个如下所示的数据集:

Col1    Col2     Col3     Col4    Col5   
   A       B        4        5       7
   G       H        5        6      NA
   H       I       NA        9       8
   K       F        9       NA      NA
   E       L       NA        8       9
   H       I        1        0      10

如何将该na.fill()函数应用于 Col2 之后的所有列?

如果我要单独做,它会是这样的:

df$Col3<-na.fill(df$Col3, c(NA, "extend", NA))
df$Col4<-na.fill(df$Col4, c(NA, "extend", NA))
df$Col5<-na.fill(df$Col5, c(NA, "extend", NA))  

问题是我的实际数据框有 100 多列。有没有一种快速的方法可以将此函数应用于前 2 个之后的所有列?

标签: rna

解决方案


na.fill 确实处理多个列。真的不需要使用lapply,mutate等。只需将相关列替换为na.fill在这些相同列上运行的结果即可。如果您知道是什么ix,那么您可以用它替换第一行,以便在本例中我们可以交替使用ix <- 3:5or ix <- -(1:2)

ix <- sapply(DF, is.numeric)
replace(DF, ix, na.fill(DF[ix], c(NA, "extend", NA)))

给予:

  Col1 Col2 Col3 Col4 Col5
1    A    B    4  5.0  7.0
2    G    H    5  6.0  7.5
3    H    I    7  9.0  8.0
4    K    F    9  8.5  8.5
5    E    L    5  8.0  9.0
6    H    I    1  0.0 10.0

请注意,您可以交替使用na.approx

replace(DF, ix, na.approx(DF[ix], na.rm = FALSE))

笔记

Lines <- "Col1    Col2     Col3     Col4    Col5   
   A       B        4        5       7
   G       H        5        6      NA
   H       I       NA        9       8
   K       F        9       NA      NA
   E       L       NA        8       9
   H       I        1        0      10"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE, strip.white = TRUE)

推荐阅读