这段代码工作正常:
dt <- data.table(c(as.integer(98033),as.integer(980341234),as.integer(98033)),c(1,2,3))
dt[,.(count=.N),by=V1]
我的问题在于此代码块:
dt <- dt[,zips:=lapply(V1,fixzip)]
dt[,.(count=.N),by=zips]
哪个投掷
[.data.table
中的错误(dt ,,。(count = .N),by = zips): &#39; by&#39;中的项目或者&#39; keyby&#39;列表是长度(1,1,1)。每个都必须与x中的行或i(3)返回的行数相同。
我认为它与lapply赋值有关,因为环境浏览器显示
V1:int 98033 980341234 98033
zips:3个列表
.. $:int 98033
.. $:int 98034
.. $:int 98033
如何将lapply分配的列表更改为普通列?或者,如果有人能指出我更好的&#39; R&#39;这样做的方式值得赞赏。
如果相关,则fixzip函数如下所示:
fixzip <- function(zip){
if(is.finite(zip) == 0){
return(0)
}
if(zip < 10000){
return(0)
}
if(zip > 100000){
return(as.integer(floor(zip/10000)))
}
return(zip)
}
答案 0 :(得分:1)
使用sapply()而不是lapply()。 Sapply返回向量,而lapply返回列表。感谢@David Arenburg。