【问题标题】:Increment by 0.1 for every change in column in RR 中每列更改一次,增加 0.1
【发布时间】:2017-07-28 01:30:38
【问题描述】:

使用这个数据框,我想为 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)]))))

【问题讨论】:

    标签: r


    【解决方案1】:

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

    1. 创建一行“滞后”的列
    2. 比较两列
    3. 计算累计和,放入数据框中

    所以在代码中:

    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)

    【讨论】:

      【解决方案2】:

      我们可以试试

      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
      

      【讨论】:

      • 成功了!谢谢你的帮助,我花了太长时间摸不着头脑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多