gpt4 book ai didi

r - 如何合并数据集而不在一个有多个值的地方循环?

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

鉴于我现在知道的基本工具(which, order, if, %in%, order, 等等),我经常遇到一个我称之为“唯一性问题”的问题。

问题基本上是这样的......

我有一个矩阵 A,我想用另一个原始矩阵 B 填充它。

 A:  
[upc] [day1] [day2] ... day52
[1] 123 NA NA NA
[2] 456 NA NA NA
[3] 789 NA NA NA

B 是超大的行,所以循环是不可能的。

     [upc]    [quantity]          [day] 
[1] 123 11 1
[2] 123 2 1
[3] 789 5 1
[4] 456 10 1
[5] 789 6 1

我想用矩阵 B 中的数量为矩阵 A 中的每个 UPC 填充第 1 天。问题是 B 中的每个 UPC 有多个实例,我无法遍历它们以获得总数量放在每个 upc 旁边。

所以我想要的是这个..(这将完全填写,即第 2-52 天 ..通过循环其他天,这是小的,因此易于管理)

A:  
[upc] [day1] [day2] ... day52
[1] 123 13 NA NA
[2] 456 10 NA NA
[3] 789 11 NA NA

你知道有什么函数可以不用循环来完成这个吗?

最佳答案

如果您将原始矩阵转换为data.frame,您可以使用aggregatemergereshape > 到达那里:

为添加的999做一些包含多天的数据:

A <- data.frame(upc=c(123,456,789,999))
B <- data.frame(
upc=c(123,123,789,456,789,999,999,999),
quantity=c(11,2,5,10,6,10,3,3),
day=c(1,1,1,1,1,1,2,2)
)

按 id 和日期聚合数量,然后合并和 reshape :

mrgd <- merge(A,aggregate(quantity ~ upc + day ,data=B, sum),by="upc")
final <- reshape(mrgd,idvar="upc",timevar="day",direction="wide",sep="")
names(final) <- gsub("quantity","day",names(final))

给出:

final
# upc day1 day2
#1 123 13 NA
#2 456 10 NA
#3 789 11 NA
#4 999 10 6

关于r - 如何合并数据集而不在一个有多个值的地方循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582870/

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