r - 合并数据框时,我需要在 R 中重构我的行和列
问题描述
我已经在 R 中进行了完整的空间分析以进行生态学研究。为此,我必须在 rgeos 包中运行各种地理操作,例如 gUnion、gIntersect、gArea 等。
当我终于开始将所有数据合并在一起时,我遇到了问题。
我正在处理农场地块的数据,当我使用 gintersect 来提取栖息地特征(一层是农场,一层是土地利用,两者都是矢量 .shp 文件)时,生成的数据框会为每个栖息地创建一个新行,尽管它们是相同的农场。
我想知道是否可以为每个栖息地创建新列而不是新行,以便每个农场只有一行数据。
下面的例子
set.seed(100)
WhatIHave <- data.frame(ID = c(1, 2, 3, 4, 5, 6),
farm = c('a', 'a', 'a', 'a', 'b', 'b'),
habitat = c("urban", "pasture","urban", "pasture", "urban", "pasture"))
WhatIWant <- data.frame(ID = c(1, 2, 3),
farm = c('a', 'a', 'b'),
habitat1 = c("urban", "urban", "urban"),
habitat2 = c("pasture", "pasture", "pasture"))
WhatIHave
WhatIWant
下面的真实数据框。正如您所看到的,应该只有 3 行(一个农场有两个田地,所以每个田地一行,因为它们是不同的)并且有很多重复的值,因为应该只有三行,因此我需要 Habitat 和 Habitat_Area_Hectares 为多列每一行。
解决方案
我想到了。
bufflanduse <- spread(bufflanduse, key=Habitat, value=Ha)
这将从行中提取值并创建一个新列(键)并用提供的数据(值)填充它,在我的情况下它是区域。现在每个农场都有一份栖息地和相关区域的列表。
推荐阅读
- postgresql - Postgres 函数 FOR IN SELECT LOOP 缩放
- c# - Is it possible to install windows app on linux or mac OS?
- c++ - Copying/reassigning `std::stringbuf` in C++
- css - 我们如何使用 CSS Grid 自动生成各种大小的网格列?
- java - 在 java 代码中创建数组对象时出错
- version-control - 您如何在源代码存储库中管理 Jupyter Notebook?
- css - CSS 媒体查询未显示在 chrome 检查器中
- javascript - 如何确保 process.env.TZ = 'UTC'; 在 npm run test 上首先运行?
- python - 气流 Python 产量声明
- javascript - 为什么我的生成器没有产生从下一个方法传入的参数值?