【发布时间】:2017-08-23 17:24:52
【问题描述】:
我正在尝试获取与每行中的项目编号相似(在整个数据表中)的所有项目的 ECDF,并将 ECDF 列添加到数据表的末尾(EstimatePrediction)。
这适用于单个项目,因此可以一一检查。
#Set Current ItemNumber
currentItemNumber = “XXXXX”
#Set Estimate Days
currentEstimate = 5
#Gets the index of the ItemNumber from the Matches table
itemNoIndex = ((matches%>%subset(Item_No ==itemNumber))$ItemIndex[1])
#Gets all the matching indexs that equal the index and select data
matchingItems = matches%>%filter(ItemIndex == itemNoIndex) %>%
filter(MatchItemIndex != ItemIndex) %>%
merge(data.filter %>%
select(ITEM_NO,ACTUAL_DAYS),by = 'ITEM_NO')
#Get the ECDF of all matching items at the estimate
ecdf(matchingItems $ACTUAL_DAYS)( currentEstimate )
我正在尝试采用上述 R 代码并进行修改以适用于整个 data.filter 数据表。问题是它仅适用于 data.filter 数据中的第一行。第一行之后的行基于第一行的数据,而不是它们自己的数据。
EstimatePrediction = data.filter %>% mutate(PROBABILITY_PREDICTION = ecdf((matches%>%subset(ItemIndex == ((matches%>%subset(Item_No== ITEM_NO))$ItemIndex[1])) %>%
subset(MatchItemIndex != ItemIndex) %>%
merge(data.filter, by = 'ITEM_NO'))$ACTUAL_DAYS)(ESTIMATE_DAYS) )
我对 R 很陌生,所以我愿意接受任何建议。我可以通过遍历 data.filter 得到正确的输出,但是速度非常慢。
样本数据
Matches
MatchItemIndex ItemIndex MatchItemOrder Item_No Count Cumulative
<int> <int> <int> <chr> <int> <int>
1 1 1 1 CBL233J 14 14
2 2 2 1 CGW112N 4 4
3 3 3 1 CAT418D 5 5
4 4 4 1 BRH131T 29 29
5 5 5 1 CQD390A 17 17
6 6 6 1 CEE533J 11 11
data.filter
ITEM_NO ESTIMATE_DAYS ACTUAL_DAYS
1: CBL233J 10 6
2: CGW112N 22 12
3: CAT418D 22 18
4: BRH131T 33 16
5: CQD390A 21 15
6: CEE533J 7 2
编辑**** 我现在能够得到我需要的输出,它真的很慢:
data.filter = data.filter%>%mutate(Index = 1:n())
loopData = data.filter%>%select(ITEM_NO, ACTUAL_DAYS, ESTIMATE_DAYS, Index)
simpleV = unlist(loopData)
outputTest = 1:nrow(loopData)
ptm <- proc.time()
for(i in 1:nrow(loopData)){
#Get Index for Item Number
itemNoIndex = (matches%>%subset(ITEM_NO == simpleV[paste('ITEM_NO',i,sep="")]))$ItemIndex[1]
#Find all the matches that have the same index
allNNItemData = matches%>%subset(ItemIndex == itemNoIndex) %>%
subset(MatchItemIndex != ItemIndex) %>%
merge(data.filter, by = 'ITEM_NO')
outputTest[i] = ecdf(allNNItemData$ACTUAL_DAYS)(simpleV[paste('ESTIMATE_DAYS',i,sep="")])
}
proc.time() - ptm
【问题讨论】:
-
欢迎来到 SO!你能发一个reproducible example吗?
-
感谢您的回复!我正在尝试获取与每一行中的项目编号相似(在整个数据表中)的所有项目的 ECDF,并将 ECDF 列添加到数据表的末尾(EstimatePrediction)。上面的代码应该适用于上面添加的示例数据集。
-
请用文字解释你的代码是做什么的。似乎你只需要加入你的桌子,但如果没有解释就很难说。如果您以复制/可粘贴的方式提供示例数据,那也非常好 - 共享代码以创建示例或在示例数据上使用
dput()来生成此类代码。 -
Matches 表对每个项目编号都有一个索引,并且对所有与该项目相似的项目都有一个匹配索引。我想获取所有类似的物品并获取实际天数的 ECDF