如何使用不同大小的列创建data.table

时间:2016-10-03 09:59:52

标签: r data.table

我像这样创建data.table。

data x / view=x...

但我得到了这个结果。

DT = data.table(A=c(1,2,3), B=c(1,2,3,4,5))

但我想得到这个。

   A B
1: 1 1
2: 2 2
3: 3 3
4: 1 4
5: 2 5

如何创建不同大小的data.table?

4 个答案:

答案 0 :(得分:7)

我们将vector的长度保持在list('lst'),然后循环遍历list元素,在结尾追加NA并转换为{{1} }。

data.table

答案 1 :(得分:2)

install.packages("qpcR")
library(qpcR)

df <- data.table(qpcR:::cbind.na(A=c(1,2,3), B=c(1,2,3,4,5)))
  A B
1  1 1
2  2 2
3  3 3
4 NA 4
5 NA 5

答案 2 :(得分:1)

我刚刚创建了一个包装器,它不是回收元素,而是在每个向量的末尾添加NA值,以便所有输入向量的长度相同:

data.table2 <- function(...) {

  args <- list(...)
  max_length <- max(sapply(args, length))
  foo <- function(x) {
    y <- rep(NA, max_length - length(x))
    return(c(x, y))
  }
  new_args <- lapply(args, foo)
  do.call(data.table, new_args)

}

data.table2(A=c(1,2,3), B=c(1,2,3,4,5))

> DT
    A B
1:  1 1
2:  2 2
3:  3 3
4: NA 4
5: NA 5

答案 3 :(得分:0)

不太可扩展,但这也有效:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=UTF-16" http-equiv="Content-Type">
<meta content="IE=9; IE=8; IE=7; IE=EDGE" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="css/picdef.css?ver=T1.0" media="screen">
<link rel="stylesheet" type="text/css" href="css/jquery-ui.css?ver=T1.0" media="screen">
<link rel="stylesheet" type="text/css" href="css/print.css?ver=T1.0" media="print">
<link rel="stylesheet" type="text/css" href="css/font-awesome.min.css?ver=T1.0" media="screen">
<link rel="SHORTCUT ICON" href="images/favicon.ico">
</head>
<body>
 ..................................
</body>
</html>

(追加data.table(A = 1:3)[ , I := .I][data.table(B = 1:5)[ , I := .I], on = "I"] # A I B # 1: 1 1 1 # 2: 2 2 2 # 3: 3 3 3 # 4: NA 4 4 # 5: NA 5 5 以删除添加的列)