【问题标题】:replacing values from two columns in R替换 R 中两列的值
【发布时间】:2014-02-24 12:34:53
【问题描述】:

我有一个 24 列的数据框,第二列和第三列看起来像

1  2230
1  2300
1  2330 
1  2400
2  30
2  100

这只是列的一部分。第二列有 48 个一,然后是 48 个二,然后是 48 个三,以此类推,一直到 365。第三列是半小时时间,从 30 开始,然后是 100,然后是 130,然后是 200,以此类推,一直到 2400。每一列我都以上面的例子结束,其中最后一个对应于 2400。我需要遍历每一列并将 2400 替换为 0,并将与 2400 关联的最后一个值替换为值加一,所以我最终得到了

1  2230
1  2300
1  2330 
2  0
2  30
2  100

我可以轻松地替换单个列的值,但我不知道如何为其中一列依赖于另一列的两列执行此操作。我尝试使用 for 循环和 if 语句,但无法使其工作。

【问题讨论】:

    标签: r replace multiple-columns


    【解决方案1】:

    单行解决方案:

    df[df[3] == 2400, 2:3] <- cbind(df[df[3] == 2400, 2] + 1, 0)
    

    这里,我们只是将具有 2400 的行标识为第 3 个 col 值,然后将第 2 列和第 3 列替换为第 2 列 + 1 和零。

    【讨论】:

      【解决方案2】:

      这应该相当简单 - 如果您的 data.frame (df) 有列 daytime

      df[df$time==2400,]$day <- df[df$time==2400,]$day + 1
      
      df[df$time==2400,]$time <- 0
      

      如果你愿意学习使用data.table 包,这会容易得多:

      df[time==2400, c("day", "time"):= list(day + 1, 0)]
      

      【讨论】:

      • 做到了。谢谢您的帮助!我不知道 data.table 包。感谢您指出这一点
      【解决方案3】:

      有几种方法可以做到这一点,但一种非常简单的矢量化方法是使用检测数组在第三列中查找“2400”值。

      detection_array <- data[,3]==2400
      data[detection_array,2] <- data[detection_array,2] + 1
      data[detection_array,3] <- 0
      

      第 1 步:创建一个 TRUE/FALSE 值数组,用于识别第三列中的“2400”值。

      detection_array <- data[,3]==2400
      

      第 2 步:将“1”添加到第二列中的关联值。

      data[detection_array,2] <- data[detection_array,2] + 1
      

      第 3 步:将第三列中的识别值更改为“0”。

      data[detection_array,3] <- 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 2021-01-05
        • 2015-11-21
        • 2021-05-16
        • 2021-02-16
        相关资源
        最近更新 更多