我的数据集中有大约114,000个个人ID。每个个人ID都有三个不同变量的数字组合,每个ID都有一个与之关联的美元值。这三个变量中有大约4,000种不同的数字组合。换言之,140,000个ID(及其美元)被放入4,000个桶中的一个。
我希望使用' for循环'在R中,是从4,000个桶中删除前2%的ID(基于ID关联美元金额)。我不想从每个桶中删除前2%的美元。
我的数据集中的行如下: ID(不同ID),Event_ID,AL_ID,ACR_ID,ID_Dollars ** Event_ID,AL_ID和ACR_ID是三个变量'我在上面提到过。
我不知道如何为此问题引用正确的数据集,或者我会将其包含在我的帖子中。希望我的解释清楚地足以回答我提出的问题,如果没有,我道歉。
在此先感谢您的帮助,我们非常感谢。
2014年11月17日更新:
我现在有以下脚本:
# create random data similar to your requirements
ID <- seq(1,114000)
Event_ID <- sample(1:40, 114000,replace=TRUE)
AL_ID <- sample(1:10, 114000,replace=TRUE)
ACR_ID <- sample(1:10, 114000,replace=TRUE)
ID_Dollars <- sample(1:200000,114000,replace=TRUE)
df <- data.frame(ID,Event_ID,AL_ID,ACR_ID,ID_Dollars)
# create buckets
groupDf <- group_by(df,Event_ID,AL_ID,ACR_ID)
groupDfSum <- summarize(groupDf, ID_Dollars=sum(as.numeric(ID_Dollars))
groupDfSumHowManyIDShouldBeCut <- mutate(groupDfSum,numberToCut = ceiling(ID_Dollars*0.02))
# Here I am using 1 but you should use maximum value of numberToCut.
IDs_ToBeCut<-filter(groupDf, rank(ID_Dollars, ties.method="first")==max(groupDfSumHowManyIDShouldBeCut$numberToCut))
虽然脚本是朝着正确方向迈出的一步,但它仍然没有完成我最终想要对数据集做的事情。我的目标是从4,000个桶中删除前2%的episode_ID(基于美元)。如果我应该提供任何其他信息,请告诉我。一如既往,感谢您的帮助。
答案 0 :(得分:1)
我使用dplyr编写了以下解决方案,因为我理解你的问题。我可能错了随意发表评论。
library(dplyr)
# create random data similar to your requirements
ID <- seq(1,114000)
Event_ID <- sample(1:40, 114000,replace=TRUE)
AL_ID <- sample(1:10, 114000,replace=TRUE)
ACR_ID <- sample(1:10, 114000,replace=TRUE)
ID_Dollars <- sample(1:200000,114000,replace=TRUE)
df <- data.frame(ID,Event_ID,AL_ID,ACR_ID,ID_Dollars)
# create buckets
groupDf <- group_by(df,Event_ID,AL_ID,ACR_ID)
groupDfSum <- summarize(groupDf,CountOfGroup=n())
groupDfSumHowManyIDShouldBeCut <- mutate(groupDfSum,numberToCut = ceiling(CountOfGroup*0.02))
# Here I am using 1 but you should use maximum value of numberToCut.
IDs_ToBeCut<-filter(groupDf, rank(ID_Dollars, ties.method="first")==1)
# After finding suitable ID values. You should for loop IDs_ToBeCut, control if that ID is lesser than numberToCut, and remove that ID value from df.