使用数据表连接R中的连续行

时间:2018-06-19 10:10:19

标签: r data.table concatenation

我有这样的数据集

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的偶数行有意为空

3 个答案:

答案 0 :(得分:1)

这可能是一种粗暴的做法。您可以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)]

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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