对于R中列的每个更改,增加0.1

时间:2017-03-07 17:58:36

标签: r

使用此数据框我想在var1

中的每次更改时将var2增加0.1
df <- 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)]))))

2 个答案:

答案 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)

您可以将此任务拆分为较小的任务,然后按顺序完成。

  1. 创建一个&#34;滞后&#34;在一行
  2. 比较2列
  3. 计算累计金额,将其放入数据框
  4. 所以在代码中:

    helper = c(df$var1[1],df$var1[1:(nrow(df)-1)])

    isDifferent = as.integer(df$var1)!=helper注意由于R将字符串创建为因子

    而转换为int

    df$var2=1+cumsum(isDifferent *0.1)