在R中连接3个不同长度的列

时间:2018-09-27 09:19:05

标签: r tidyverse

我有3列

2个相同的长度

1的长度较短

以下是列:

column1 <- letters[1:10]

column2 <- letters[1:15]

column3 <- letters[1:15]

我希望将所有3列都连接在一起,但是column1中缺少的5个值是NA?

我该怎么做?小玩意儿?

3 个答案:

答案 0 :(得分:0)

您可以更改向量的长度

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用rowr包中的cbind.fill可以轻松实现。

library(rowr)

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

我希望这对您有帮助