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)
你知道任何可以在没有循环的情况下实现这一目标的函数吗
如果您将您的原始矩阵以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)
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |