【问题标题】:Creating a list of dataframes based on filter criteria根据过滤条件创建数据框列表
【发布时间】:2021-07-21 00:56:15
【问题描述】:

我会有一个包含ID 列的数据集。我将它们过滤成冬季和夏季的数据框。我想根据 ID 进一步拆分数据。在我的实际数据集中有超过 100 个 ID,所以我不想制作 100 个数据帧。相反,我想制作一个数据框列表。我使用group_split 函数来执行此操作,但列表的数量在冬季和夏季之间出现不均。我确定冬天和夏天应该有相同数量的 ID。有更好的方法吗?

library(lubridate)
date <- rep_len(seq(dmy("26-12-2010"), dmy("20-12-2011"), by = "days"), 500)
ID <- rep(seq(1, 5), 100)

df <- data.frame(date = date,
                 x = runif(length(date), min = 60000, max = 80000),
                 y = runif(length(date), min = 800000, max = 900000),
                 ID)
df$month <- month(df$date)
summer <- df%>% arrange(ID, date) %>%
  filter(month %in% 07:09) %>%
  group_by(ID, .add = TRUE) %>% 
  group_split(ID)


winter <- df%>% 
  arrange(ID, date) %>%
  filter(month %in% c(01,02,03)) $>% 
  group_by(ID, .add = TRUE) %>% 
  # group_split(ID)

谢谢!

【问题讨论】:

  • 你的期望是什么
  • 您的代码不能像所写的那样工作 (df != DF) 和 AnimalIDDateAndTime 不存在。所以很难调试你的问题。尝试包含minimal reproducible example
  • 你检查过你“确定”的事情是否属实吗?
  • 我的预期输出将是每个季节(冬季和夏季)的数据框列表。这些列表中的每一个都是来自较大数据帧的单个 ID。代码现在应该可以工作了,我忘记在发布时更改它们。我很抱歉。是的,当我在没有 group_split 函数的情况下过滤它们时,夏季和冬季数据框中的个人数量是相同的。
  • 我定义了它。它用于创建月份列,以便更容易按月份过滤。对此感到抱歉。

标签: r filter tidyverse


【解决方案1】:

我认为split 会做你想做的事:生成帧列表。

summer <- filter(df, month(date) %in% 7:9)
head(summer)
#         date        x        y ID
# 1 2011-07-01 74958.44 842429.7  3
# 2 2011-07-02 64223.78 897607.8  4
# 3 2011-07-03 78843.54 829362.2  5
# 4 2011-07-04 60703.31 822962.0  1
# 5 2011-07-05 71328.44 872268.8  2
# 6 2011-07-06 68827.96 880618.3  3
str(split(summer, summer$ID))
# List of 5
#  $ 1:'data.frame':    18 obs. of  4 variables:
#   ..$ date: Date[1:18], format: "2011-07-04" "2011-07-09" ...
#   ..$ x   : num [1:18] 60703 64986 79477 67815 70387 ...
#   ..$ y   : num [1:18] 822962 858762 897413 817728 838251 ...
#   ..$ ID  : int [1:18] 1 1 1 1 1 1 1 1 1 1 ...
#  $ 2:'data.frame':    18 obs. of  4 variables:
#   ..$ date: Date[1:18], format: "2011-07-05" "2011-07-10" ...
#   ..$ x   : num [1:18] 71328 65414 64275 74286 76995 ...
#   ..$ y   : num [1:18] 872269 862579 818690 825991 847360 ...
#   ..$ ID  : int [1:18] 2 2 2 2 2 2 2 2 2 2 ...
#  $ 3:'data.frame':    19 obs. of  4 variables:
#   ..$ date: Date[1:19], format: "2011-07-01" "2011-07-06" ...
#   ..$ x   : num [1:19] 74958 68828 69431 76959 68538 ...
#   ..$ y   : num [1:19] 842430 880618 852488 874800 839197 ...
#   ..$ ID  : int [1:19] 3 3 3 3 3 3 3 3 3 3 ...
#  $ 4:'data.frame':    19 obs. of  4 variables:
#   ..$ date: Date[1:19], format: "2011-07-02" "2011-07-07" ...
#   ..$ x   : num [1:19] 64224 66977 75101 64189 73444 ...
#   ..$ y   : num [1:19] 897608 845062 809777 850364 822869 ...
#   ..$ ID  : int [1:19] 4 4 4 4 4 4 4 4 4 4 ...
#  $ 5:'data.frame':    18 obs. of  4 variables:
#   ..$ date: Date[1:18], format: "2011-07-03" "2011-07-08" ...
#   ..$ x   : num [1:18] 78844 77418 79762 78613 77485 ...
#   ..$ y   : num [1:18] 829362 867594 860007 819956 815058 ...
#   ..$ ID  : int [1:18] 5 5 5 5 5 5 5 5 5 5 ...

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多