输入表如下所示。需要使用先前的非空行Value
创建新列,考虑到当前行Hour_Slot
之前的最新Hour_slot
,按ID
分组
| ID|小时槽|X|价值|
| --------------|--------------|--------------|--------------|
| ID1|2023-04-01 2:00:00|1|十六岁|
| ID1|2023-04-01 3:00:00|1|十三点五|
| ID1|2023-04-01 4:00:00|1|不适用|
| ID1|2023-04-01 5:00:00|1|四点五|
| ID1|2023-04-01 23:00:00|1|十二岁|
| ID1|2023-04-01 24:00:00|1|八点五|
| ID1|2023-04-01 4:00:00|二|十一点五|
| ID1|2023-04-01 5:00:00|二|十二岁|
输出:
| ID|小时槽|X|价值|输出值|
| --------------|--------------|--------------|--------------|--------------|
| ID1|2023-04-01 2:00:00|1|十六岁|不适用|
| ID1|2023-04-01 3:00:00|1|十三点五|十六岁|
| ID1|2023-04-01 4:00:00|1|不适用|十三点五|
| ID1|2023-04-01 5:00:00|1|四点五|十三点五|
| ID1|2023-04-01 23:00:00|1|十二岁|四点五|
| ID1|2023-04-01 24:00:00|1|八点五|十二岁|
| ID1|2023-04-01 4:00:00|二|十一点五|十三点五|
| ID1|2023-04-01 5:00:00|二|十二岁|十三点五|
示例R代码:
df[, output_Value:=shift(value, type="lag"), by= ID]
df <- df %>% group_by(ID) %>% fill(output_Value)
上面的代码没有考虑Hour_Slot。有可能有两行具有相同的Hour_slot
。我需要前一小时时段的非空值为output_Value
1条答案
按热度按时间c3frrgcw1#
一种方法是使用一系列
dplyr::mutate()
和tifyr::fill()
转换:输出: