【问题标题】:Concatenate consecutive rows in R using data table使用数据表连接R中的连续行
【发布时间】:2018-11-28 06:20:44
【问题描述】:

我有一个这样的数据集

X1         X2     X3  
Cat        123    11
9                                                                
Cat        456    22
8                                                                
Cat        789    33
7    

有什么方法可以像这样连接连续的行并形成新的数据集

X1         X2     X3  
Cat9       123    11
Cat8       456    22
Cat7       789    33

注意 - x2 和 x3 的偶数行故意留空

【问题讨论】:

  • x2 和 x3 的偶数行上有什么?你能输入你的df吗?
  • 没有数据,是空白的

标签: r data.table concatenation


【解决方案1】:

使用 Prem 的样本数据:

DTclean <- DT[1:nrow(DT) %% 2 != 0]
DTclean[, X1 := paste0(X1, DT[1:nrow(DT) %% 2 == 0, X1])]
DTclean
     X1  X2 X3
1: Cat9 123 11
2: Cat8 456 22
3: Cat7 789 33

【讨论】:

    【解决方案2】:

    基本上奇数行和偶数行数据表被取出,然后连接起来形成最终所需的输出。

    library(data.table)
    
    #convert odd rows data table into matrix
    DT1 <- as.matrix(DT[seq(1, nrow(DT), by = 2), ])
    #convert even rows data table into matrix
    DT2 <- as.matrix(DT[seq(2, nrow(DT), by = 2), ])
    
    #final result
    as.data.table(matrix(paste0(DT1, DT2), nrow = nrow(DT1)))
    

    样本数据:

    DT <- structure(list(X1 = c("Cat", "9", "Cat", "8", "Cat", "7"), X2 = c("123", "", "456", "", "789", ""), X3 = c("11", "", "22", "", "33", "")), .Names = c("X1", "X2", "X3"), row.names = c(NA, -6L), class = c("data.table", "data.frame"))
    

    【讨论】:

      【解决方案3】:

      这可能是一种粗略的做法。你可以cbind偶数行和奇数行,然后使用paste0

      dt2<-cbind(dt1[seq(1,(nrow(dt1)-1),2),],X4=dt1[seq(2,(nrow(dt1)),2),]$X1)
      dt2<-dt2[,.(X1=paste0(X1,X4),X2,X3)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-30
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 2017-11-10
        相关资源
        最近更新 更多