gpt4 book ai didi

r - 展开数据框

转载 作者:行者123 更新时间:2023-12-04 11:59:33 26 4
gpt4 key购买 nike

我想在某些条件下扩展数据框。有点类似于这个问题expand data frames inside data frame ,但不完全一样。

我有一个数据框:

df = data.frame(ID = c(3,3,3,3, 17,17,17, 74, 74, 210, 210, 210, 210), amount = c(101, 135, 101, 68,  196, 65 ,135, 76, 136, 15, 15, 15 ,15), week.number = c(4, 6, 8, 10, 2, 5, 7, 2, 6, 2, 3, 5, 6))

我想扩展每个 ID 的数据框,给定最小和最大周数,并且在此扩展的金额列中为 0。最小周数为 1,最大周数为 10。预期结果为:
df1 <- data.frame(ID = c(rep(3,10), rep(17, 10), rep(74, 10), rep(210, 10)),
amount = c(0, 0, 0, 101, 0, 135, 0, 101, 0, 68, 0, 196,
0, 0, 65, 0, 135, 0, 0, 0, 0, 76, 0, 0, 0,
136, 0, 0, 0, 0, 0, 15, 15, 0, 15, 15, 0, 0,
0, 0))

(实际上,我有数千个 ID,周数从 1 到 160)。

有没有简单快速的方法来做到这一点?

谢谢!

最佳答案

以下是使用 tidyr 的方法:

library(tidyr)
complete(df, ID, weeek.number = 1:10, fill = list(amount = 0))
#Source: local data frame [40 x 3]
#
# ID weeek.number amount
# (dbl) (dbl) (dbl)
#1 3 1 0
#2 3 2 0
#3 3 3 0
#4 3 4 101
#5 3 5 0
#6 3 6 135
#7 3 7 0
#8 3 8 101
#9 3 9 0
#10 3 10 68
#.. ... ... ...

基础 R 中的一种方法是使用 expand.gridmerge :
newdf <- merge(expand.grid(ID = unique(df$ID), weeek.number = 1:10), df, all.x = TRUE)
newdf$amount[is.na(newdf$amount)] <- 0 # replace NA with 0

关于r - 展开数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35708877/

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