Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换R中的for循环_R_For Loop - Fatal编程技术网

替换R中的for循环

替换R中的for循环,r,for-loop,R,For Loop,我试图在编写代码时停止使用for循环,但在表示一个简单的操作时遇到了一点问题 比如说,我正试图对一家拥有多家餐厅的公司的数据集进行简单的最近邻估计。我有三个特点:城市,商店,月和一个目标函数销售。城市、商店和月份都用数字表示:城市取值范围为1-100,商店取值范围为1-50,月份取值范围为1-12 现在,我想用apply函数替换for循环: for (c in 1:100){ for (s in 1:50){ for (m in 1:12){ dat1$Sales[dat1$City

我试图在编写代码时停止使用for循环,但在表示一个简单的操作时遇到了一点问题

比如说,我正试图对一家拥有多家餐厅的公司的数据集进行简单的最近邻估计。我有三个特点:城市,商店,月和一个目标函数销售。城市、商店和月份都用数字表示:城市取值范围为1-100,商店取值范围为1-50,月份取值范围为1-12

现在,我想用apply函数替换for循环:

for (c in 1:100){
 for (s in 1:50){
  for (m in 1:12){
   dat1$Sales[dat1$City==c & dat1$Store==s & dat1$Month==m & is.na(dat1$Sales)] <-
    mean(dat1$Sales[dat1$City==c & dat1$Store==s & dat1$Month==m & !is.na(dat1$Sales)])
  }
 }
}
for(1:100中的c){
对于(1:50中的s){
对于(1:12中的m){

dat1$Sales[dat1$City==c&dat1$Store==s&dat1$MOUNT==m&is.na(dat1$Sales)]尝试使用
aggregate
。它有一个
公式
类似的界面,可以轻松获得应用于
数据.frame
部分的函数的结果。然后只需将结果分配到
dat1
中需要它的地方即可

TempOut<- aggregate(Sales~City+Store+Month, FUN=mean,data=dat1)

dat1$Sales[is.na(dat1$Sales),]<-TempOut[TempOut$City==[dat1[is.na(dat1$Sales),]$City 
& TempOut$Store==[dat1[is.na(dat1$Sales),]$Store & TempOut$Month==
[dat1[is.na(dat1$Sales),]$Month,]$Sales

TempOut尝试使用
aggregate
。它有一个类似
公式的界面,可以很容易地获得应用于
data.frame
部分的函数的结果。然后只需将结果分配到
dat1
中需要它的位置即可

TempOut<- aggregate(Sales~City+Store+Month, FUN=mean,data=dat1)

dat1$Sales[is.na(dat1$Sales),]<-TempOut[TempOut$City==[dat1[is.na(dat1$Sales),]$City 
& TempOut$Store==[dat1[is.na(dat1$Sales),]$Store & TempOut$Month==
[dat1[is.na(dat1$Sales),]$Month,]$Sales

TempOut这里有一个
数据表
方式:

require(data.table)
setDT(dat1)

dat1[, Sales:={
  m=mean(Sales,na.rm=TRUE)
  replace(Sales, is.na(Sales), m)
},by=.(City, Store, Month)]

如果有像
Sales[is.na(Sales)]:=…
这样的东西会很好,但这只是一个现在。这里是。

这里是一个
数据。表
方式:

require(data.table)
setDT(dat1)

dat1[, Sales:={
  m=mean(Sales,na.rm=TRUE)
  replace(Sales, is.na(Sales), m)
},by=.(City, Store, Month)]

如果有类似于
Sales[is.na(Sales)]:=…
的东西会很好,但这只是一个暂时的问题。下面是使用data.table,
dat1[,Sales:=Sales[!is.na(Sales)],by='c,s,m'.
请查看.a
dput()一些数据框的
很酷,可以帮助人们帮助你。这是干什么的?乍一看,看起来你只是删除了sales为NA的行。你能再给我们看一点数据框吗?啊,我没有注意到
的意思
。在这种情况下,
dat1[,sales:=mean(sales[!is.NA(sales)],by='c,s,m']
@Frank将使用data.table,
dat1[,Sales:=Sales[!is.NA(Sales)],by='c,s,m']替换所有
Sales
值的平均值或仅那些
Sales
NA
,请查看.a
dput()一些数据框的
很酷,可以帮助人们帮助你。这是干什么的?乍一看,看起来你只是删除了sales为NA的行。你能再给我们看一点数据框吗?啊,我没有注意到
的意思
。在这种情况下,
dat1[,sales:=mean(sales[!is.NA(sales)],by='c,s,m']
@Frank将所有
销售
值替换为平均值,还是仅替换那些
销售
值,即
NA