【问题标题】:Assign feature number based on the continuation of Date of occurrence in R根据 R 中发生日期的延续分配特征编号
【发布时间】:2020-12-23 15:55:09
【问题描述】:

在数据框中,dt 如何分配随日期变化而变化的特征编号。即,在dt 中,我们有多个网格点,但两个特征在 Date 中被间隙隔开,这在该图中可以明显看出(特征 1 从 2018-06-20 到 208-06-21,特征 2 从 2018-06- 28 至 2018 年 6 月 29 日)。 This 答案为某种类似的问题提供了解决方案,但只针对一个点。所以我的问题是:如何计算/识别没有间隔的日期列,并为所有第一组没有间隔的日期分配说 Feature1,依此类推。

dt<-structure(list(x = c(228, 229, 230, 231, 232, 233, 234, 235, 
 236, 237, 238, 231, 232, 233, 234, 229, 230, 231, 232, 233, 234, 
235, 236, 237, 238, 231, 232, 233, 234, 211, 212, 213, 214, 215, 
216, 217, 218, 219, 220, 221, 211, 212, 213, 214, 215, 216, 217, 
218, 219, 220, 221, 222, 211, 212, 213, 214, 215, 216, 217, 218, 
219, 220, 221, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 
221, 222, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 
211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222), 
y = c(47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 46, 46, 
46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 46, 46, 46, 
46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 46, 46, 46, 
46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 
47, 47, 47, 47, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 
46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 46, 46, 
46, 46, 46, 46, 46, 46, 46, 46, 46, 46), Date = structure(c(17702, 
 17702, 17702, 17702, 17702, 17702, 17702, 17702, 17702, 17702, 
17702, 17702, 17702, 17702, 17702, 17703, 17703, 17703, 17703, 
 17703, 17703, 17703, 17703, 17703, 17703, 17703, 17703, 17703, 
17703, 17709, 17709, 17709, 17709, 17709, 17709, 17709, 17709, 
17709, 17709, 17709, 17709, 17709, 17709, 17709, 17709, 17709, 
17709, 17709, 17709, 17709, 17709, 17709, 17710, 17710, 17710, 
17710, 17710, 17710, 17710, 17710, 17710, 17710, 17710, 17710, 
17710, 17710, 17710, 17710, 17710, 17710, 17710, 17710, 17710, 
17710, 17710, 17711, 17711, 17711, 17711, 17711, 17711, 17711, 
17711, 17711, 17711, 17711, 17711, 17711, 17711, 17711, 17711, 
17711, 17711, 17711, 17711, 17711, 17711, 17711), class = "Date"), 
val = c(62.24, 65.06, 67.92, 70.82, 73.73, 76.53, 78.24, 
78.43, 77.09, 75.11, 72.98, 63.98, 66.96, 70.01, 72.17, 61.76, 
 64.68, 67.59, 70.54, 73.32, 74.82, 74.69, 73.12, 70.82, 67.7, 
64.64, 67.71, 70.72, 72.68, 73.58, 78.25, 81.23, 82.79, 83.07, 
 82.2, 80.49, 78.08, 74.86, 70.71, 65.61, 81.85, 86.05, 88.58, 
 89.59, 89.28, 88, 85.91, 83.3, 80.11, 75.96, 70.66, 64.46, 
 79.09, 84.56, 88.64, 91.44, 92.76, 92.59, 91.25, 88.95, 85.7, 
 81.46, 76.27, 93.98, 99.09, 102.71, 104.84, 105.43, 104.74, 
102.94, 100.19, 96.49, 91.73, 85.89, 79.15, 94.49, 99.93, 
 103.71, 106.07, 106.84, 106.05, 103.97, 100.82, 96.62, 91.38, 
 85.14, 110.63, 115.91, 119.45, 121.3, 121.52, 120.44, 118.22, 
 114.87, 110.35, 104.58, 97.59, 89.61)), row.names = c(NA, 
-98L), groups = structure(list(Date = structure(c(17702, 17703, 
 17709, 17710, 17711), class = "Date"), .rows = structure(list(
1:15, 16:29, 30:52, 53:75, 76:98), ptype = integer(0), class = c("vctrs_list_of", 
 "vctrs_vctr", "list"))), row.names = c(NA, -5L), class = c("tbl_df", 
 "tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
dt
plt<-ggplot(dt,aes(x=x,y=y))+
  geom_tile(aes(fill=val))+
  facet_wrap(~Date)
plt

【问题讨论】:

    标签: r dataframe dplyr tidyverse


    【解决方案1】:

    我不完全确定您的期望和最终期望的输出。但是,听起来您想根据日期间隔来识别特征。尤其是超过一天的间隔会分离特征。如果是这样,您可以执行以下操作:

    library(tidyverse)
    
    dt %>%
      ungroup() %>%
      mutate(feature = c(1, cumsum(diff(Date) > 1) + 1)) 
    

    简而言之,这将确定Date 中的行之间的差异超过 1 时的累积总和(当日期的间隔大于 1 时会发生这种情况)。以您的示例为例,这将为您的数据添加一个 feature 列,对于日期为 6-20 到 6-21 的所有行,值为 1,对于从 6-27 到 6-29 的其他行,值为 2 .

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 2014-12-07
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      相关资源
      最近更新 更多