Соедините 3 столбца разной длины в R - PullRequest
0 голосов
/ 27 сентября 2018

У меня 3 столбца

2 одинаковой длины

1 имеет меньшую длину

вот столбцы:

column1 <- letters[1:10]

column2 <- letters[1:15]

column3 <- letters[1:15]

Я хочу, чтобы все 3 столбца были объединены, но в столбце 1 пропущены 5 значений, равных NA?

Что можно сделать, чтобы добиться этого?булочка?

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018
n <- max(length(column1), length(column2), length(column3))
data.frame(column1[1:n],column2[1:n],column3[1:n])

   column1.1.n. column2.1.n. column3.1.n.
1             a            a            a
2             b            b            b
3             c            c            c
4             d            d            d
5             e            e            e
6             f            f            f
7             g            g            g
8             h            h            h
9             i            i            i
10            j            j            j
11         <NA>            k            k
12         <NA>            l            l
13         <NA>            m            m
14         <NA>            n            n
15         <NA>            o            o
0 голосов
/ 27 сентября 2018

Используя cbind.fill из пакета rowr, вы можете сделать это легко.

library(rowr)

new<- cbind.fill(column1,column2,column3)

Надеюсь, это поможет

0 голосов
/ 27 сентября 2018

Вы можете изменить длину вектора

column1 <- letters[1:10]
column2 <- letters[1:15]

length(column1) <- length(column2)

Теперь

> column1
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" NA  NA  NA  NA  NA

Мы можем обернуть его в функцию

cbind_dif <- function(x = list()){
    # Find max length
    max_length <- max(unlist(lapply(x, length)))

    # Set length of each vector as
    res <- lapply(x, function(x){
        length(x) <- max_length
        return(x)
    })

    return(as.data.frame(res))
}

# Example usage:
> cbind_dif(list(column1 = column1, column2 = column2))
   column1 column2
1        a       a
2        b       b
3        c       c
4        d       d
5        e       e
6        f       f
7        g       g
8        h       h
9        i       i
10       j       j
11    <NA>       k
12    <NA>       l
13    <NA>       m
14    <NA>       n
15    <NA>       o
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...