我有一个两列数据框。第一列是时间戳,第二列是某个值。例如:
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
}
答案 0 :(得分:2)
我们可以做一个两步基R解决方案,我们首先找到criteria_df
start
和end
范围内的值,然后替换{{1} } data_df
来自它value
&#39; s criteria_df
如果它匹配或保持不变。
value