【发布时间】:2015-08-05 15:39:10
【问题描述】:
我正在尝试将 if 语句与 ddply 一起使用,但遇到了 if 语句的问题。
一个示例数据集是:
data<-data.frame(Gear=c(rep("S",10),rep("C",10)),TowSurvey=c(0,0,1,1,0,1,1,1,1,0),TowCom=c(0,1,1,1,0,1,1,1,1,0),
StationID=c(1,2,3,4,5,6,7,8,9,10),Totwght=c(2,8,6,4,12,9,56,7,89,10),Totexpwght=c(5,8,12,45,89,56,23,78,56,41),
Expnum=c(1,5,6,98,45,2,6,3,7,45),Exp=c(56,25,85,74,1,23,56,45,89,75))
我的第一次尝试是
if(data$Gear=="S" & data$TowSurvey== 1 | data$Gear=="C" & data$TowCom== 1){
datad<-ddply(data, .(StationID,Gear), summarize,Totwghtpertow=sum(Totwght),
Totexppertow=sum(Totexpwght),Totnum =sum(Expnum),Totexpnum=sum(Exp))}
print(datad)
但不满足if语句条件的记录被包含在datad中。
然后我发现了这篇文章:聚合(计数)符合条件的行,按唯一值分组。 Aggregate (count) rows that match a condition, group by unique values
所以我根据帖子的答案第二次尝试是
datad<-ddply(data, .(StationID,Gear), summarize,Totwghtpertow=sum(Totwght[Gear=="S" & TowSurvey== 1 | Gear=="C" & TowCom== 1]))
我只尝试使用一列作为测试并且得到相同的结果。任何帮助都将不胜感激。 谢谢
【问题讨论】:
-
我认为您的答案是正确的 - 输出仅包括您过滤掉所有值的 0
-
那么如果正确的话,有没有办法去掉不符合条件的记录呢?
标签: r if-statement plyr