2017-08-11 4 views
1

Je recherche des options (de préférence en utilisant la base R) pour lier différentes trames de données de longueur à partir du bas. Les lignes restantes/manquantes doivent être NA. Exemple:Liaison de trames de données de longueur différente par colonnes à partir du bas

set.seed(1212) 
a = as.data.frame(rnorm(1, 0, 1)) 
b = as.data.frame(rnorm(4, 0, 1)) 
c = as.data.frame(rnorm(3, 0, 1)) 

Résultats attendus:

rnorm(1, 0, 1) rnorm(4, 0, 1) rnorm(3, 0, 1) 
1 NA    1.8374224  NA 
2 NA    0.3436815  0.03719874 
3 NA    -1.3600955  -1.92311898 
4 -0.6290858  0.5358145  0.41087971 
+1

Utiliser 'rowr :: cbind.fill (a, b, c)' – akrun

+0

grâce @akrun. est-il possible de le faire en utilisant simplement la base R? 'cbind()' ou 'merge()'? – AK88

+1

Ce ne sera pas un one-liner dans la base R, ou sera très compliqué one-liner. Plusieurs questions similaires ont été posées, vous pouvez donc certainement trouver des réponses de base R. – lmo

Répondre

2

d'abord, d'évaluer la longueur maximale des colonnes à se lier. Ensuite, utilisez cette longueur pour remplir les colonnes d'un nouveau fichier de données avec des NA afin qu'elles s'adaptent.

data.frame(a = c(rep(NA, lenMax - length(a[,1])), a[,1]), 
      b = c(rep(NA, lenMax - length(b[,1])), b[,1]), 
      c = c(rep(NA, lenMax - length(c[,1])), c[,1])) 

#   a   b   c 
# 1   NA 1.8374224   NA 
# 2   NA 0.3436815 0.03719874 
# 3   NA -1.3600955 -1.92311898 
# 4 -0.6290858 0.5358145 0.41087971 
2

Vous pouvez utiliser smartbind()

gtools::smartbind(a,b,c) 
# rnorm(1, 0, 1) rnorm(4, 0, 1) rnorm(3, 0, 1) 
#1  -0.6290858    NA    NA 
#2:1    NA  1.8374224    NA 
#2:2    NA  0.3436815    NA 
#2:3    NA  -1.3600955    NA 
#2:4    NA  0.5358145    NA 
#3:1    NA    NA  0.03719874 
#3:2    NA    NA -1.92311898 
#3:3    NA    NA  0.41087971 
1

Nous pouvons utiliser rowr

library(rowr) 
apply(rowr::cbind.fill(a, b, c, fill = NA), 2, function(x) x[order(!is.na(x))]) 
# rnorm.1..0..1. rnorm.4..0..1. rnorm.3..0..1. 
#[1,]    NA  1.8374224    NA 
#[2,]    NA  0.3436815  0.03719874 
#[3,]    NA  -1.3600955 -1.92311898 
#[4,]  -0.6290858  0.5358145  0.41087971