r - 聚合代码显示:model.frame.default 中的错误……可变长度不同
问题描述
我正在使用kaggle 数据集。由于数据集很大,很难插入dput
输出。但我正在尝试按地区计算年度粮食产量的总和。我正在为此目的使用聚合。由于某种原因,它显示以下错误:
聚合R代码:
years<-colnames(p[,11:63])
agg<-aggregate(years~area, data=p, sum)
错误:
Error in model.frame.default(formula = years ~ area, data = p) :
variable lengths differ (found for 'area')
我尝试了下面的链接,但它似乎对我来说不是很有用:
注意:数据集包含 N/A。已使用na.omit
函数删除
bk18评论后更新
> p[, lapply(.SD, class)]
area_abb area_code area item_code item element_code element Unit latitude longitude
1: factor integer factor integer factor integer factor factor numeric numeric
Y1961 Y1962 Y1963 Y1964 Y1965 Y1966 Y1967 Y1968 Y1969 Y1970 Y1971
1: integer integer integer integer integer integer integer integer integer integer integer
Y1972 Y1973 Y1974 Y1975 Y1976 Y1977 Y1978 Y1979 Y1980 Y1981 Y1982
1: integer integer integer integer integer integer integer integer integer integer integer
Y1983 Y1984 Y1985 Y1986 Y1987 Y1988 Y1989 Y1990 Y1991 Y1992 Y1993
1: integer integer integer integer integer integer integer integer integer integer integer
Y1994 Y1995 Y1996 Y1997 Y1998 Y1999 Y2000 Y2001 Y2002 Y2003 Y2004
1: integer integer integer integer integer integer integer integer integer integer integer
Y2005 Y2006 Y2007 Y2008 Y2009 Y2010 Y2011 Y2012 Y2013
1: integer integer integer integer integer integer integer integer integer
提前致谢,
解决方案
不确定不同长度会发生什么,但您可以使用 data.table 尝试不同的解决方案,以查看错误是否可重现:
library(data.table)
setDT(mydata)
mydata[, sum(p, na.rm = T), .(years, area)]
看看这是否能达到你想要的结果。
更新:
假设您的数据采用以下格式:
year area value
... ... ...
换句话说,它已经融化了,所以多年来它“很长”,你应该只需要这样做:
p[, area := as.character(area)]
p[, sum(value, na.rm = T), .(year, area)]
如果它没有先融化,那么将其融化melt()
以使其长形,其中列与我上面写的内容相匹配。
但是,如果您想保持您发布的屏幕截图中的内容宽,只需使用 lapply:
p[, area := as.character(area)]
p[, lapply(.SD, sum, na.rm = T), area, .SDcols = colnames(p)[grep("Y", colnames(p))]]
您在这里所做的是应用于sum()
每一列(仅此lapply(.SD, sum, na.rm = T)
而已。然后,您正在通过area
(这是第三个参数)进行操作。该.SD
部分(由 控制.SDcols
)允许您对正在处理的表进行子集化。这允许您仅对返回的列求和.SDcols
。我们使用一个简单的grep
语句定义这些列,该语句查找包含字母“Y”的列名,在您的情况下为年份列。
推荐阅读
- python - 如何在课堂上使用__getitem__,同时保持打字/mypy快乐
- activemq-artemis - 具有静态发现和共享存储设置的服务器实例之间的同步
- php - 当我尝试使用 4G 连接访问我的网站时出现空白页面(ssl 错误)?
- python - 无法在 pandas 数据框中执行算术和排序操作
- unity3d - Unity 2020.1.0b12.3931 - 场景 2 中的对象在场景 1 中可见
- html - 使用有角度的引导对齐组件
- amazon-web-services - AWS EC2 实例上的 Apache ActiveMQ 的 SSL
- neo4j - 从 OSM 文件导入后如何理解 Neo4j 空间节点
- jqgrid - jQuery jqGrid 中的分页问题
- python-3.x - 如何在 Python 中替换字符串中的连字符和换行符