我像这样创建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?
答案 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
以删除添加的列)