更改列时如何避免R中的for循环
我正在使用一个看起来非常类似于以下内容的数据帧: 这是一个600000行数据帧。我想做的是,对于同一日期内的每个重复实例,我想将成本除以重复实例的总数。我也只想考虑那些属于“销售”策略的人。 例如,在1/1/16中,有两个“帮助包”也属于“销售”策略。因为在同一日期内有两个实例,所以我想将每个实例的成本除以2(因此每个实例的成本为5美元) 这是我的代码:更改列时如何避免R中的for循环,r,performance,loops,for-loop,vector,R,Performance,Loops,For Loop,Vector,我正在使用一个看起来非常类似于以下内容的数据帧: 这是一个600000行数据帧。我想做的是,对于同一日期内的每个重复实例,我想将成本除以重复实例的总数。我也只想考虑那些属于“销售”策略的人。 例如,在1/1/16中,有两个“帮助包”也属于“销售”策略。因为在同一日期内有两个实例,所以我想将每个实例的成本除以2(因此每个实例的成本为5美元) 这是我的代码: for(i in 1:length(dfExample$Date)){ if(dfExample$Tactic) == "Sales")
for(i in 1:length(dfExample$Date)){
if(dfExample$Tactic) == "Sales"){
list = agrep(dfExample$Package[i], dfExample$Package)
for(i in list){
date_repeats = agrep(i, dfExample$Date)
dfExample$Cost[date_repeats] = dfExample$Package[i]/length(date_repeats)
}
}
}
这是难以置信的低效和缓慢。我知道一定有更好的方法来实现这一点。任何帮助都将不胜感激。谢谢大家! 使用
dplyr
:
library(dplyr)
dfExample %>%
group_by(Date, Package, Tactic) %>%
mutate(Cost = Cost / n())
我有点不明白你所说的“实例”是什么意思。这个(很清楚)按日期、包和战术分组,所以会考虑这些列的独特组合作为石斑。如果在“实例”的定义中未包含
策略
,则可以仅按日期和包将其删除为分组。使用dplyr
:
library(dplyr)
dfExample %>%
group_by(Date, Package, Tactic) %>%
mutate(Cost = Cost / n())
我有点不明白你所说的“实例”是什么意思。这个(很清楚)按日期、包和战术分组,所以会考虑这些列的独特组合作为石斑。如果在“实例”的定义中未包含策略
,则可以仅按日期和包将其删除到组中。ave()
可以提供无需额外包的解决方案:
with(dfExample, Cost / ave(Cost, Date, Package, Tactic, FUN=length))
ave()
可以提供无需额外软件包的解决方案:
with(dfExample, Cost / ave(Cost, Date, Package, Tactic, FUN=length))
没有人想要数据的图像。与
dput(液滴液位(头部(您的_数据))共享您的数据)
。它可以复制/粘贴并保留列类。没有人想要数据的图像。与dput(液滴液位(头部(您的_数据))共享您的数据)
。它将是可复制/粘贴的,并保留列类。