R语言 如何填写值为0的列中缺失的数据?

pcrecxhr  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(197)

我有一个列表df_list,其中有40个 Dataframe (元素),其中df_list[[1]]是列表的第一个 Dataframe ,“Date”是一个“POSIX”对象。Frequency列考虑了某个日期/时间的tweet数量。
我想添加缺少的'Data'并将它们与值'0'相关联,这是列表中的每个dataframe。我如何才能做到这一点?
下面是列表中的dataframe示例:
| 频率|日期|
| --------------|--------------|
| 第二章|2022-12-01 12:52|
| 三|2022-12-01 12:53|
| 1|2022-12-01 12:54|
| 第二章|2022年12月1日12时56分|
| 四|2022-12-01 12:57|
| 四|2022-12-01 13:00|
我的期望:
| 频率|日期|
| --------------|--------------|
| 0|2022-12-01 12:51|
| 第二章|2022-12-01 12:52|
| 三|2022-12-01 12:53|
| 1|2022-12-01 12:54|
| 0|2022年12月1日12时55分|
| 第二章|2022年12月1日12时56分|
| 四|2022-12-01 12:57|
| 0|2022-12-01 12:59|
| 0|2022年12月1日12时58分|
| 四|2022-12-01 13:00|

qyswt5oh

qyswt5oh1#

一种解决方案是将is转换为tsibble(一个时间序列tibble),并使用fill_gaps()函数。你可以指定你想用0来填充它,而不是默认的NA,如果你愿意的话,可以选择一个比你的数据集中第一次观察到的时间更早的开始时间(尽管同意评论,从问题中还不清楚为什么会这样)。

library(tidyverse)
library(tsibble)

dat <- tribble(
  ~freq, ~date,
  2,    "2022-12-01 12:52",
  3,    "2022-12-01 12:53",
  1,    "2022-12-01 12:54",
  2,    "2022-12-01 12:56",
  4,    "2022-12-01 12:57",
  4,    "2022-12-01 13:00"
)

dat |> 
  mutate(date = lubridate::ymd_hm(date)) |> 
  as_tsibble(index = date) |> 
  fill_gaps(freq = 0, .start = lubridate::ymd_hm("2022-12-01 12:51"))

这将返回类似于以下内容的结果:

# A tsibble: 10 x 2 [1m] <UTC>
    freq date               
   <dbl> <dttm>             
 1     0 2022-12-01 12:51:00
 2     2 2022-12-01 12:52:00
 3     3 2022-12-01 12:53:00
 4     1 2022-12-01 12:54:00
 5     0 2022-12-01 12:55:00

然后,您可以将其转换为一个函数,并使用purrr中的map()将其应用于列表中的多个元素。

相关问题