如何将数据框自动拆分为多年

时间:2018-04-16 16:22:07

标签: r

我已经附加了数据框的一部分,我知道如何手动将数据子设置为1959年或1969年,但这个数据从1959年到2003年继续。有没有办法可以让它自动拆分它每一年?

enter image description here

1 个答案:

答案 0 :(得分:0)

根据您用于分析的工具,您有几个选择。

基础R split函数接受一个对象(如数据框)和定义分割的向量。它返回拆分结果的列表。请注意,在下面的示例中,我的data.frame有3列,我按列a拆分。结果是长度为2的命名列表,a中每个唯一值对应一个。另请注意,我可以将df除以data.frame中不存在的其他值 - 当我传入df$a时,我传入的长度与数据中的行数相同.frame。

df = data.frame(a=c(1,1,1,2,2,2),b=c(1,2,3,1,2,3),c=c(1,2,3,4,5,6))
split(df,df$a)

#> $`1`
#>   a b c
#> 1 1 1 1
#> 2 1 2 2
#> 3 1 3 3
#> 
#> $`2`
#>   a b c
#> 4 2 1 4
#> 5 2 2 5
#> 6 2 3 6

<强> tidyverse

使用tidyverse中的dplyr,您可以按组对数据进行分析。您还可以先过滤掉不需要的值。请参阅此处我首先filter输出不需要的值(仅保留列a等于1的位置)。你可以用year %in% c(1959,1969)之类的东西来完成这个任务。然后我使用group_by指定分组列 - 现在,如果我执行更改列或拟合模型等操作,则会通过b列值完成。在您的情况下,您希望按year分组。

library(dplyr)
df %>%
  filter(a == 1) %>%
  group_by(b)

#> # A tibble: 3 x 3
#> # Groups:   b [3]
#>       a     b     c
#>   <dbl> <dbl> <dbl>
#> 1     1     1     1
#> 2     1     2     2
#> 3     1     3     3

<强> data.table

您可以考虑使用data.table类似df[year %in% c(1959,1969),AvgAve = mean(Ave),by=year](语法可能无法正常工作)来计算每年保留1959年和1969年的平均值