具有三个逻辑条件R的SUM(已编辑)

时间:2018-10-01 17:54:22

标签: r sum conditional-statements

首先,我检查了现有主题。不幸的是,它们要么不完全相关,要么我无法理解它们。正如您从我的问题类型中知道的那样,我对R十分陌生。我希望这没问题...

我觉得我走对了。。。

此处https://i.stack.imgur.com/5jv0m.jpg是数据帧(df)的摘录

我想比较排放(y)子类别的值是否汇总了父类别中所述的值。部分原因是汇总子类别的值。

简而言之,我想知道sum(3.B.1 + 3.B.2 + ... + 3.B.n)= 3.B. (即csv中说明的总和)在给定的年份和国家/地区。我要核对这些金额。

我已经尝试过使用以下代码(在2010年和奥地利使用):

sum(compare_df, x4 %in% c("1.A.1", "1.A.2", "1.A.3", "1.A.4", "1.A.5") & x 
== "2010" & x2 == "Austria")

但是得到这个:

FUN(X [[i]],...)中的错误:   仅在具有所有数字变量的数据框上定义

有了这个之后,有没有一种方法可以运行一个代码,该代码可以在其他条件下(即国家/地区和年份)自动运行代码?您一些关键字会在这里有所帮助。然后我可以自己搜索。

我希望我的问题很清楚,并感谢您的任何帮助或建议。抱歉这么长的帖子...

PS:我已经更新了所有已知信息,希望我的问题更加清楚。

2 个答案:

答案 0 :(得分:0)

很难确定compare_df的外观,但这是使用dplyr的一种可能的解决方案,非常适合处理数据帧。

%>%运算符是“管道”,它接收前一个函数的结果并将其插入到后一个函数的第一个参数中。

所有dplyr函数(filtergroup_bysummarize等)都将数据作为第一个函数参数,因此它与{{1} }。

%>%

答案 1 :(得分:0)

如果要验证y变量的和,则需要指定要求和的变量。当前,您的sum语句正在尝试对整个data.frame求和,并且在遇到分类变量时会抛出错误

  

FUN(X [[i]],...)中的错误:仅在具有所有   数字变量

我没有复制您的代码,但是可以通过sum(iris)进行验证。如果您确实想对所有数字变量求和,则必须执行sum(iris[sapply(iris,is.numeric)])

但是要解决关于对三个变量进行子集化的问题,您必须执行以下操作:

sum(iris$Sepal.Length[iris$Species %in% c("setosa","versicolor") &
                        iris$Sepal.Width >= 3 &
                        iris$Petal.Length >= 2])

首先,您必须告诉sum您想对哪些数据,帧和变量求和,例如(代码的iris $ Sepal.Length部分-这将是您的df$y),然后使用[您需要对感兴趣的变量进行子集化。在您的代码中,当您引用不带df $表示法的变量时,R将找不到那些变量,因为它们不是对象,而是data.frame的一部分。希望这可以帮助。

在您的帖子中,年份变量也是数字变量,而不是类别变量,因此您应在2010年前后删除引号。