我已经附加了数据框的一部分,我知道如何手动将数据子设置为1959年或1969年,但这个数据从1959年到2003年继续。有没有办法可以让它自动拆分它每一年?
答案 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年的平均值