r - 在 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 和一般编程也很陌生。所以我很感谢任何关于那个的提示!干杯!
解决方案
您可以使用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-07
,X2007.01.07
因此请记住我'X%Y.%m.%d'
在as.Date
. 如果您以某种方式设法读取了显示的列名,即2007-01-07
使用%Y-%m-%d
.as.Date
推荐阅读
- c# - 为什么隐式运算符必须是静态的?
- graphql - 如何在 Sangria 中使用 graphql 查询过滤列表响应
- c# - 如何在 C# 中更改 wsdl:part 名称?
- ios - 如何居中对齐 CollectionView 单元格?
- java - VM初始化时出错;无法加载本机库:找不到依赖库
- firebase - 使用 Firebase 身份验证和 Ngrx 进行路由保护
- javascript - 在哪里存储 JWT 令牌 Laravel 5.6 应用程序?
- sonarqube - 您如何比较 SonarQube 7 中两个项目的分析?
- mqtt - Azure 物联网中心。云到设备消息(MQTT、自定义主题)
- python - 如何使用opencv python在图像上查找道路?