首先,我检查了现有主题。不幸的是,它们要么不完全相关,要么我无法理解它们。正如您从我的问题类型中知道的那样,我对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:我已经更新了所有已知信息,希望我的问题更加清楚。
答案 0 :(得分:0)
很难确定compare_df
的外观,但这是使用dplyr
的一种可能的解决方案,非常适合处理数据帧。
%>%
运算符是“管道”,它接收前一个函数的结果并将其插入到后一个函数的第一个参数中。
所有dplyr
函数(filter
,group_by
,summarize
等)都将数据作为第一个函数参数,因此它与{{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年前后删除引号。