gpt4 book ai didi

r - 如何在 R 中扩展大型数据框

转载 作者:行者123 更新时间:2023-12-02 06:34:59 24 4
gpt4 key购买 nike

我有一个数据框

df <- data.frame(
id = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 4),
date = c("1985-06-19", "1985-06-19", "1985-06-19", "1985-08-01",
"1985-08-01", "1990-06-19", "1990-06-19", "1990-06-19",
"1990-06-19", "2000-05-12"),
spp = c("a", "b", "c", "c", "d", "b", "c", "d", "a", "b"),
y = rpois(10, 5))

id date spp y
1 1 1985-06-19 a 6
2 1 1985-06-19 b 3
3 1 1985-06-19 c 7
4 2 1985-08-01 c 7
5 2 1985-08-01 d 6
6 3 1990-06-19 b 5
7 3 1990-06-19 c 4
8 3 1990-06-19 d 4
9 3 1990-06-19 a 6
10 4 2000-05-12 b 6

我想扩展它,以便存在 id 和 spp 的每个组合,并且对于当前不在数据框中的每个组合都有 y = 0。数据框目前大约有 100,000 行和 15 列。扩展后大约有 300,000 列(在我的实际数据集中,spp 有 17 个唯一值)。

对于 id 的每个值,date 都是相同的(例如,当 id = 2 时,日期总是 = 1985-08-01)。在我的真实数据集中,除了 sppy 之外的所有列都可以由 id 指定。

我想以这样的方式结束:

   id       date spp y
1 1985-06-19 a 6
1 1985-06-19 b 3
1 1985-06-19 c 7
1 1985-06-19 d 0*
2 1985-08-01 a 0*
2 1985-08-01 b 0*
2 1985-08-01 c 7
2 1985-08-01 d 6
3 1990-06-19 b 5
3 1990-06-19 c 4
3 1990-06-19 d 4
3 1990-06-19 a 6
4 2000-05-12 a 0*
4 2000-05-12 b 6
4 2000-05-12 c 0*
4 2000-05-12 d 0*
  • 指明添加的行

我将来可能不得不使用可能更大的数据帧来执行此操作,因此我们将不胜感激一种快速、高效(时间和内存)的方法来执行此操作,但任何解决方案都会让我满意。我认为应该有使用 dplyrdata.tablereshape 包的方法,但我对它们中的任何一个都不是很熟悉.我不确定仅扩展行 id、spp 和 y 是否最简单,然后执行 left_join()merge() 重新组合日期(和我真实数据框中的所有其他变量)基于id

最佳答案

expand.grid 是一个很有用的函数,

mergedData <- merge(
expand.grid(id = unique(df$id), spp = unique(df$spp)),
df, by = c("id", "spp"), all =T)

mergedData[is.na(mergedData$y), ]$y <- 0

mergedData$date <- rep(levels(df$date),
each = length(levels(df$spp)))

由于您实际上并未对数据子集执行任何操作,因此我认为 plyr 不会有帮助,也许使用 data.table 更有效。

关于r - 如何在 R 中扩展大型数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22059308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com