簡體   English   中英

在R中加入3個不同長度的列

[英]Join 3 columns of different lengths in R

我有 3 列

2個一樣長

1 長度較短

這是專欄:

column1 <- letters[1:10]

column2 <- letters[1:15]

column3 <- letters[1:15]

我希望將所有 3 列連接在一起,但 column1 中缺少的 5 個值是否為 NA?

我該怎么做才能實現這一目標? 一個小問題?

您可以更改向量的長度

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
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

使用rowr包中的cbind.fill可以輕松實現。

library(rowr)

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

我希望這有幫助

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

tibble(a = c(column1, rep(NA, length(column2) - length(column1))), b = column2, c = column3)

# A tibble: 15 × 3
   a     b     c    
   <chr> <chr> <chr>
 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM