首页 > 解决方案 > 在 R 中:按日期从数据框中提取特定列并将基本列保留在开头

问题描述

我有几个大数据框,其中包含 2007-2019 年特定坐标的时间序列数据。8113 行和 301 列。每年被划分为 16 天的时间步长,这导致每个坐标每年有 23 个值。它看起来像这样:

X   longitude   latitude   label     2007-01-07   2007-01-23 ... 2019-12-10   2019-12-26  
1   -56.58652   -30.87850  cropland  0.08367160   0.07883158     0.07414120   0.08120061
2   -56.58458   -30.88260  cropland  0.07888613   0.07438400     0.07831833   0.07352642
3   -56.58429   -30.87860  cropland  0.08331446   0.07837244     0.07169452   0.07229450

我想将数据框子集为年,使每个子集的前四列保持相同。然后将它们一起保存在数据框列表中。所以我正在寻找的输出应该是这样的:

X   longitude   latitude   label     2007-01-07   2007-01-23   ...
1   -56.58652   -30.87850  cropland  0.08367160   0.07883158   ...  
2   -56.58458   -30.88260  cropland  0.07888613   0.07438400   ...  
3   -56.58429   -30.87860  cropland  0.08331446   0.07837244   ...
X   longitude   latitude   label     2008-01-10   2008-01-26   ...
1   -56.58652   -30.87850  cropland  0.08367160   0.07883158   ...  
2   -56.58458   -30.88260  cropland  0.07888613   0.07438400   ...  
3   -56.58429   -30.87860  cropland  0.08331446   0.07837244   ...

...

X   longitude   latitude   label     2019-01-12   2019-01-28   ...
1   -56.58652   -30.87850  cropland  0.08367160   0.07883158   ...  
2   -56.58458   -30.88260  cropland  0.07888613   0.07438400   ...  
3   -56.58429   -30.87860  cropland  0.08331446   0.07837244   ...

我需要像上面的例子那样对 8 个数据帧这样做。我知道,这应该是非常基本的,但我对 R 和一般编程也很陌生。所以我很感谢任何关于那个的提示!干杯!

标签: rdataframesubset

解决方案


您可以使用split.default基于年份和lapply cbind每个列表的前四列来拆分数据。

result <- lapply(split.default(df[-(1:4)], 
                 format(as.Date(names(df)[-(1:4)], 'X%Y.%m.%d'), '%Y')), 
                 function(x) cbind(df[1:4], x))

R 试图阻止以数字开头的列名,因此如果您使用默认选项读取数据,它会将列名从更改为2007-01-07X2007.01.07因此请记住我'X%Y.%m.%d'as.Date. 如果您以某种方式设法读取了显示的列名,即2007-01-07使用%Y-%m-%d.as.Date


推荐阅读