Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 如何根据另一列中的匹配条件从一列中获取单元格组的总和?_R_Dataset - Fatal编程技术网

R 如何根据另一列中的匹配条件从一列中获取单元格组的总和?

R 如何根据另一列中的匹配条件从一列中获取单元格组的总和?,r,dataset,R,Dataset,我有这样的数据 Weight Zip 23 88762 45.3 34957 37.6 87293 212.45 34957 58.3 87293 92.45 88762 我尝试将对应于相同邮政编码的权重相加,并将结果添加到新列: TotalWeight 115.45 257.75 95.9 257.75 95.

我有这样的数据

    Weight     Zip
    23         88762
    45.3       34957
    37.6       87293
    212.45     34957
    58.3       87293
    92.45      88762
我尝试将对应于相同邮政编码的权重相加,并将结果添加到新列:

    TotalWeight
    115.45
    257.75
    95.9
    257.75 
    95.9 
    115.45
我曾想过做这样的事,但我想一定有更有效的办法。谢谢

weight <- c(23, 45.3, 37.6, 212.45, 58.3, 92.45)
zip <- c(88762L, 34957L, 87293L, 34957L, 87293L, 88762L)

function(){
zippop<-data.frame()
for (i in unique(zip)){
zippop<-rbind(zippop, c(i,sum(weight[which(zip==i)])))}
return (zippop)
}
weight在这里起作用:

df <- data.frame(Weight=c(23,45.3,37.6,212.45,58.3,92.45),Zip=c(88762,34957,87293,34957,87293,88762));
df$TotalWeight <- ave(df$Weight,df$Zip,FUN=sum);
df;
##   Weight   Zip TotalWeight
## 1  23.00 88762      115.45
## 2  45.30 34957      257.75
## 3  37.60 87293       95.90
## 4 212.45 34957      257.75
## 5  58.30 87293       95.90
## 6  92.45 88762      115.45
df在这里工作:

df <- data.frame(Weight=c(23,45.3,37.6,212.45,58.3,92.45),Zip=c(88762,34957,87293,34957,87293,88762));
df$TotalWeight <- ave(df$Weight,df$Zip,FUN=sum);
df;
##   Weight   Zip TotalWeight
## 1  23.00 88762      115.45
## 2  45.30 34957      257.75
## 3  37.60 87293       95.90
## 4 212.45 34957      257.75
## 5  58.30 87293       95.90
## 6  92.45 88762      115.45

df请让您的示例重现。也就是说,不要只显示您的数据,而是让代码的开头创建它,例如:
weight我冒昧地为您添加了这些行,但是您的函数也不能立即执行,因此您仍然应该编辑您的代码。请使您的示例重现。也就是说,不要只显示数据,而是让代码的开头创建它,例如:
weight我冒昧地为您添加了这些行,但是您的函数也不能立即执行,因此您仍然应该编辑代码。这正是我需要的。非常感谢!tapply(使用求和函数)也可以满足我的需要。非常感谢!tapply(使用sum函数)也可以工作