)
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
节日快乐!
答案 0 :(得分:1)
我们可以将apply
与MARGIN = 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")