我有一个数据帧,其序列号与下面类似:
data <- c(1,1,1,0,0,1,1,2,2,2,0,0,0,2,1,1,0,1,0,2)
Run Code Online (Sandbox Code Playgroud)
我需要的是找到1,2或3次重复0的所有实例,其中前进和后续数字是相同的 - 即1或2都是2(例如1,0,1或2,0,0,2但是不是2,0,1).
然后我需要用周围的值填充零.
我设法找到并计算连续的零
consec <- (!data) * unlist(lapply(rle(data)$lengths, seq_len))
Run Code Online (Sandbox Code Playgroud)
然后我找到了这些连续零开始的行:
consec <- as.matrix(consec)
first_na <- which(consec==1,arr.ind=TRUE)
Run Code Online (Sandbox Code Playgroud)
但我对替换过程感到困惑
我非常感谢你对此的帮助!
卡尔
我有一个这种形式的数据表(2000000+行,1000+组):
set.seed(1)
dt <- data.table(id = rep(1:3, each = 5), values = sample(c("a", "b","c"), 15, TRUE))
> dt
id values
1: 1 a
2: 1 c
3: 1 a
4: 1 b
5: 1 a
6: 2 c
7: 2 c
8: 2 b
9: 2 b
10: 2 c
11: 3 c
12: 3 a
13: 3 a
14: 3 a
15: 3 b
Run Code Online (Sandbox Code Playgroud)
我想在每个 ID 组中替换字符“b”之前的整个字符“a”序列,并且我想用“b”替换它们。所以条件是,如果 "a" 或一系列 "a" 出现在 "b" 之前,则替换所有的 "a"。(实际上,在我的真实表格中,当“b”前面是“a”、“x”或“y”时,应该替换前面的字符,但我应该能够概括)
在上面的例子中,第 …