【问题标题】:How to break up data frames in R如何在R中分解数据帧
【发布时间】:2020-04-26 06:31:47
【问题描述】:

我有这个数据框,我坚持尝试根据年份将它们拆分为其他数据集。比如“2020、2021”

例如: 《2020》 所有 2020 年的价值观

“2021” 所有 2021 年的价值观 我将它命名为:数据集

Date    Left    Right   Up  Down  Middle  Size
1/1/2020    1   1   2   2   2   2
2/1/2020    1   7   8   9   8   8
3/1/2020    2   3   4   6   7   8
1/1/2021    1   2   2   2   2   7
2/1/2021    1   7   8   9   8   8
3/1/2021    2   3   4   6   7   8

我还是 R 新手,只是在剔除数据时遇到问题 如果有人能帮上忙,不胜感激

【问题讨论】:

  • 欢迎来到 SO 和 R。为了帮助我们帮助您,请在问题中包含您尝试过的代码。您可能会发现查看此链接 minimal reproducible example 会有所帮助。请以数据框格式添加您的数据,例如df

标签: r dataframe split parameters


【解决方案1】:

您可以从日期中提取年份,然后使用split 获取每年的数据框列表。

output <- split(df, format(as.Date(df$Date, "%d/%m/%Y"), "%Y"))
output
#$`2020`
#      Date Left Right Up Down Middle Size
#1 1/1/2020    1     1  2    2      2    2
#2 2/1/2020    1     7  8    9      8    8
#3 3/1/2020    2     3  4    6      7    8

#$`2021`
#      Date Left Right Up Down Middle Size
#4 1/1/2021    1     2  2    2      2    7
#5 2/1/2021    1     7  8    9      8    8
#6 3/1/2021    2     3  4    6      7    8

您也可以使用lubridate 函数来实现。

library(lubridate)
output <- split(df, year(dmy(df$Date)))

数据

df <- structure(list(Date = c("1/1/2020", "2/1/2020", "3/1/2020", "1/1/2021", 
"2/1/2021", "3/1/2021"), Left = c(1L, 1L, 2L, 1L, 1L, 2L), Right = c(1L, 
7L, 3L, 2L, 7L, 3L), Up = c(2L, 8L, 4L, 2L, 8L, 4L), Down = c(2L, 
9L, 6L, 2L, 9L, 6L), Middle = c(2L, 8L, 7L, 2L, 8L, 7L), Size = c(2L, 
8L, 8L, 7L, 8L, 8L)), class = "data.frame", row.names = c(NA, -6L))

【讨论】:

  • 请注意,日期格式也可以使用'%m/%d/%Y'(或mdy(...) for lubridate)如果日期是美国风格,月份在前。
  • 是的,我同意。虽然没有足够的信息可以肯定地说。
  • 我同意。这就是为什么我在假设其中一个选项的答案上添加了一条注释来说明这两个选项。
猜你喜欢
  • 2017-02-07
  • 2014-12-02
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多