在数据集中,有一个特定列作为随机值以规则间隔重复。我想用增加的值替换它们,如下所述。
Column_B包含随机数据
Column_A Column_B
1.5 0
0.2 1
0.3 5
4.5 6
12.5 7
1.6 0
7.8 1
1.8 5
6.9 6
11.0 7
转换后Column_B应该
Column_A Column_B
1.5 0
0.2 1
0.3 2
4.5 3
12.5 4
1.6 0
7.8 1
1.8 2
6.9 3
11.0 4
是否有更快的方法来执行此操作而不是创建新列,然后将其替换为Column_B
?感谢。
答案 0 :(得分:2)
您可以使用回收以重复序列填充色谱柱。例如,如果您希望序列在重复之前长64,则可以使用
DF$column_B <- 0:(64 - 1L)
更一般地说,对于像你的例子中重复序列中每个元素不同的模式,你可以使用which
找到序列的长度,然后做同样的事情
seq.length = which(dt$B == dt$B[1L])[2L] - 1L
dt$B = 0:(seq.length - 1L)
答案 1 :(得分:1)
我们按照&#39; Column_B&#39;的累积总和进行分组其中元素为0(或下一个元素减少的位置)并获取roww序列以将其分配给&#39; Column_B&#39;
library(data.table)
setDT(df1)[, Column_B := as.integer(seq_len(.N)-1), cumsum(Column_B==0)]
df1
# Column_A Column_B
# 1: 1.5 0
# 2: 0.2 1
# 3: 0.3 2
# 4: 4.5 3
# 5: 12.5 4
# 6: 1.6 0
# 7: 7.8 1
# 8: 1.8 2
# 9: 6.9 3
#10: 11.0 4
或者找到&#39; Column_B&#39;中的相邻元素之间的差异,根据该值获得累积总和以创建group_by
变量
setDT(df1)[, Column_B := as.integer(seq_len(.N)-1), cumsum(c(TRUE, diff(Column_B)< 0))]