如何组合数据集而不循环具有多个值的数据集?

wol*_*oor 3 loops r matrix dataset

鉴于我现在知道的基本工具(哪个,顺序,如果,%in%,order等等),我经常遇到一个我称之为"唯一性问题"的问题.

问题基本上就像这样......

我有一个矩阵AI想要从另一个原始矩阵B填写.

 A:  
     [upc]  [day1]    [day2]     ...    day52 
[1]  123     NA       NA                 NA
[2]  456     NA       NA                 NA
[3]  789     NA       NA                 NA
Run Code Online (Sandbox Code Playgroud)

B是巨大的行,所以循环是不可能的.

     [upc]    [quantity]          [day] 
[1]  123         11                 1
[2]  123          2                 1
[3]  789          5                 1
[4]  456         10                 1
[5]  789          6                 1
Run Code Online (Sandbox Code Playgroud)

我想用矩阵A中的每个UPC填充day1,矩阵B中的数量.问题是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
Run Code Online (Sandbox Code Playgroud)

你知道任何可以在没有循环的情况下实现这一目标的函数吗

the*_*ail 5

如果您将您的原始矩阵以data.frameS,你可以使用aggregate,merge并且reshape到那里:

为添加的id添加一些数据,包括多天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)
)
Run Code Online (Sandbox Code Playgroud)

按id和day汇总数量,然后合并和重塑:

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))
Run Code Online (Sandbox Code Playgroud)

这使:

final
#  upc day1 day2
#1 123   13   NA
#2 456   10   NA
#3 789   11   NA
#4 999   10    6
Run Code Online (Sandbox Code Playgroud)