根据数据框中特定字符的位置替换空单元格

时间:2018-12-26 18:08:22

标签: r

data.frame在每行的不同位置包含一个S字符。如何将S之前的空白单元格替换为0(零);以及S之后NA之后的空白单元格。

我已经尝试过这个compute character position over a data.frame

对于data.frame的每一行,初始条件为:;1;;1;S;;;; 预期结果将是:0;1;0;1;S;NA;NA;NA;NA

节日快乐!

1 个答案:

答案 0 :(得分:1)

我们可以将applyMARGIN = 1一起使用

df1[] <- t(apply(df1, 1, function(x) {
             i1 <- which(x == 'S')[1]
             x[seq_len(i1)][x[seq_len(i1)] == ''] <- 0
             i2 <- (i1+1):length(x)
             x[i2][x[i2]==''] <- NA
               x}))

或者使用max.col获取每行中元素'S'的列索引,然后使用row/column索引将0值分配给那些在'S'之前为空白的列,随后,将所有其他空白("")替换为NA

i1 <- max.col(df1 == 'S', 'first')
i2 <- cbind(rep(seq_len(nrow(df1)), i1), sequence(i1))
df1[i2][df1[i2]== ""] <- 0
df1[df1==""] <- NA

数据

df1 <-  structure(list(v1 = c(1L, 5L), v2 = c("", ""), v3 = c("", "S"
), v4 = c("S", ""), v5 = c("", ""), v6 = c("", "4"), v7 = c("", 
  "3"), v8 = c("", "")), row.names = c(NA, -2L), class = "data.frame")