我想获得ECDF的所有项目类似(在整个数据表中)到每行中的项目编号,并将ECDF列添加到数据表的末尾(EstimatePrediction)。R两个数据表上的变异和子集数据
这适用于单个项目,因此它们可以逐个检查。
#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!你可以请发布一个[可重现的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? – csgroen
感谢您的回复!我试图让所有项目的ECDF与整个数据表中的项目号相似,并将ECDF列添加到数据表的末尾(EstimatePrediction)。上面的代码应该与上面添加的示例数据集一起工作。 – JJansen27
也请用您的代码来解释您的代码。似乎也许你只是需要加入你的桌子,但很难说没有解释。如果您以复制/粘贴的方式提供样本数据,那么它也会非常好,您可以共享代码以创建样本,也可以使用样本数据上的dput()来生成此类代码。 – Gregor