如果给定具有条件的数据帧,如何改变列?

时间:2018-05-29 04:37:44

标签: r dplyr

我有一个两列数据框。第一列是时间戳,第二列是某个值。例如:

library(tidyverse)
set.seed(123)
data_df <- tibble(t = 1:15,
                  value = sample(letters, 15))

我有另一个数据框,它指定了需要更新的时间戳范围及其对应的值。例如:

criteria_df <- tibble(start = c(1, 3, 7),
                      end = c(2, 5, 10),
                      value = c('a', 'b', 'c')
                      )

这意味着我需要改变data_df中的value列,以使其从t = 1到t = 2的值是“a”,从t = 3到t = 5是&#39; b&#39;从t = 7到t = 10是&#39; c&#39;

在R中建议的方法是什么?

我能想到的唯一方法是循环使用criteria_df中的每一行,并在过滤t列后改变data_df中的value列,如下所示:

library(iterators)
library(foreach)

foreach(row = row_iter, .combine = c) %do% {
  seg_start = row$start
  seg_end = row$end
  new_value = row$value

  data_df %<>%
    mutate(value = if_else(between(t, seg_start, seg_end),
                                    new_value,
                                    value))
  NULL
}

1 个答案:

答案 0 :(得分:2)

我们可以做一个两步基R解决方案,我们首先找到criteria_df startend范围内的值,然后替换{{1} } data_df来自它value&#39; s criteria_df如果它匹配或保持不变。

value