gpt4 book ai didi

r - 如何使 data.frame 中的组等长?

转载 作者:行者123 更新时间:2023-12-04 10:40:37 25 4
gpt4 key购买 nike

我有这个 data.frame:

df <- data.frame(id=c('A','A','B','B','B','C'), amount=c(45,66,99,34,71,22))

id | amount
-----------
A | 45
A | 66
B | 99
B | 34
B | 71
C | 22

我需要扩展以便每个 by data.frame 中的组长度相等(用零填充),如下所示:
id | amount 
-----------
A | 45
A | 66
A | 0 <- added
B | 99
B | 34
B | 71
C | 22
C | 0 <- added
C | 0 <- added

这样做的最有效方法是什么?

注意

对我的实际 100 万行 data.frame 提供的一些解决方案进行基准测试,我得到:
             plyr   | data.table  |  unstack
-----------------------------------
Elapsed: 139.87s | 0.09s | 2.00s

最佳答案

使用 data.table 的一种方式

df <- structure(list(V1 = structure(c(1L, 1L, 2L, 2L, 2L, 3L), 
.Label = c("A ", "B ", "C "), class = "factor"),
V2 = c(45, 66, 99, 34, 71, 22)),
.Names = c("V1", "V2"),
class = "data.frame", row.names = c(NA, -6L))

require(data.table)
dt <- data.table(df, key="V1")

# get maximum index
idx <- max(dt[, .N, by=V1]$N)

# get final result
dt[, list(V2 = c(V2, rep(0, idx-length(V2)))), by=V1]

# V1 V2
# 1: A 45
# 2: A 66
# 3: A 0
# 4: B 99
# 5: B 34
# 6: B 71
# 7: C 22
# 8: C 0
# 9: C 0

关于r - 如何使 data.frame 中的组等长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621795/

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