使用此数据框我想在var1
中的每次更改时将var2增加0.1df <- data.frame(var1=c("a", "a", "1", "0", "b", "b", "b", "c", "1", "1"))
在这种情况下,结果应为:
var1 var2
a 1
a 1
1 1.1
0 1.2
b 1.3
b 1.3
b 1.3
c 1.4
1 1.5
1 1.5
我能够使用以下代码为var1中的每个更改将var2增加1,但我无法将其操作增加0.1。
df$var2 <- c(0,cumsum(as.numeric(with(df,var1[1:(length(var1)-1)] != var1[2:length(var1)]))))
答案 0 :(得分:1)
我们可以尝试
df$var1 <- as.character(df$var1)
df$var2 <- seq(0, 1, by = 0.1)[with(df, cumsum(c(TRUE, var1[-1]!= var1[-length(var1)])))] + 1
答案 1 :(得分:1)
您可以将此任务拆分为较小的任务,然后按顺序完成。
所以在代码中:
helper = c(df$var1[1],df$var1[1:(nrow(df)-1)])
isDifferent = as.integer(df$var1)!=helper
注意由于R将字符串创建为因子
df$var2=1+cumsum(isDifferent *0.1)