R data.table lapply将列表类型归因于列

时间:2015-04-20 21:44:30

标签: r data.table lapply calculated-columns

这段代码工作正常:

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)
}

1 个答案:

答案 0 :(得分:1)

使用sapply()而不是lapply()。 Sapply返回向量,而lapply返回列表。感谢@David Arenburg。