创建空data.table时如何处理nrows?

时间:2016-05-26 14:10:13

标签: r dataframe data.table

说我想创建一个data.table,有两种情况,当我知道行数和我不知道行数时。 在第一种情况下,我找不到任何关于创建具有一定行数的空data.table的具体内容。

在第二种情况下,最好是创建一行data.table来开始或者只是高估了nrows?

编辑:是否有多行参数?

3 个答案:

答案 0 :(得分:4)

假设您事先知道了列的类,您可以这样做:

对于空数据。表

dt <- data.table(x=character(),y=numeric())

如果你想在你的空data.table中实际添加结果,你需要附加它们(这就是为什么制作一个空数据的原因之一。表格没有多大意义)。像这样:

dt <- rbind(dt,data.table(x=1),fill=TRUE)

对于已知行的data.table

nrow <- 100
dt <- data.table(x=as.character(rep(NA,nrow)),y=as.numeric(rep(NA,nrow)))

或者,对于具有已知行的数据表,您可以使用@Frank的方法(我个人更喜欢这种方法,因为它略短):

dt <- data.table(x=character(),y=numeric())[1:nrow]

答案 1 :(得分:0)

# When you know the number of rows, e.g. 5 rows and 3 columns
DT = data.table(matrix(vector(), 5, 3, dimnames=list(c(), c("Date", "File", "User"))), stringsAsFactors=F)

# When you don't know the number of rows, just start with 1 and add as needed
DT = data.table(matrix(vector(), 1, 3, dimnames=list(c(), c("Date", "File", "User"))), stringsAsFactors=F)

还有其他的,可能不那么详细的方法,但我喜欢这种方法,因为你可以轻松地为其他类型data.table切换data.frame,但一切仍然有用。

答案 2 :(得分:0)

如果您可能希望将一个data.table列名(调用)保存到另一个data.table(undervaluedCalls)以及类类型,您可以使用以下代码:

undervaluedCalls <- as.data.table(calls)[0] # copy the column structure of calls
undervaluedCalls <- undervaluedCalls[1:10000] # add 10000 NA rows preseving column classes

列名是:

  

colnames(呼叫)        [1]“选项”“Ticker”“Undl_Price”“Expiration”“Days_to_Exp”“Strike”“Bid”“Ask”“Mid_Price”
      [10]“最后”“改变”“卷”“OI”

检查列类运行:

sapply(undervaluedCalls, class)

对我而言,这是创建新数据的最短路径。您可以在之后删除空行。