R使用先前的值完成空单元格

时间:2016-05-14 16:37:33

标签: r

我有两个cols这样的数据库

  1. C(1,钠,钠,2,NA,3)
  2. C(0,2,3,2,0,4)
  3. 我想获得1列c(10,12,13,22,20,34)

    我怎样才能在R?

    中这样做

1 个答案:

答案 0 :(得分:0)

假设第一列包含空格("")且character类,我们将空格转换为NA并使用na.locf将NA元素替换为非NA前一个元素,然后paste输出第二列并创建一个新列(“colN”)。

library(zoo)
library(data.table)
setDT(df1)[col1=="", col1:= NA][, colN := as.numeric(paste0(na.locf(col1), col2))]
df1
#   col1 col2 colN
#1:    1    0   10
#2:   NA    2   12
#3:   NA    3   13
#4:    2    2   22
#5:   NA    0   20
#6:    3    4   34

更新

注意到OP在编辑帖子时对第一列进行了更改,即现在空白("")神秘地改为na(这不是真正的NA)。在这种情况下,在使用read.csv/read.table阅读数据集时,na.strings = "na"可用于自动将“na”转换为NA或其他

 setDT(df1)[col1=="na", col1 := NA][, colN := as.numeric(paste0(na.locf(col1, col2))]

数据

df1 <- structure(list(col1 = c("1", "", "", "2", "", "3"), col2 = c(0L, 
2L, 3L, 2L, 0L, 4L)), .Names = c("col1", "col2"), row.names = c(NA, 
-6L), class = "data.frame")