Je crée des données.Table comme ceci. mais je reçois ce résultat. p> mais j'aimerais obtenir ceci. P> A B
1: 1 1
2: 2 2
3: 3 3
4: NA 4
5: NA 5
4 Réponses :
Nous conservons le vecteur code> de la longueur inégale dans une liste code> (code> ('lst'), puis boucle via la liste code> éléments, appendez NA à la fin et convertir en data.Table code>. lst <- list(A=c(1,2,3), B=c(1,2,3,4,5))
DT <- setDT(lapply(lst, `length<-`, max(lengths(lst))))[]
DT
# A B
#1: 1 1
#2: 2 2
#3: 3 3
#4: NA 4
#5: NA 5
Nice et intelligente, je ne pense jamais aux missions à l'intérieur * Appliquer des fonctions: c
Je viens de créer une enveloppe qui, au lieu d'éléments de recyclage, ajoute des valeurs na code> à la fin de chaque vecteur de sorte que la longueur de tous les vecteurs d'entrée soit la même: 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
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
Totalement bien comme un ponctuel, mais gardez à l'esprit que l'utilisation de fonctions inexportées est plus risquée.
pas très extensible, mais cela fonctionne aussi bien:
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