cbind带有条件的不同分割行

时间:2015-03-30 04:35:29

标签: r loops split na

我想用条件cbind数据帧来插入" NA"在后续的行中。我在数据框split中应用了dfall并获得了:

我的df[[1]]

chr  start  end    N01   N04   N05 
 1    30    40     30    20     29 

我的df[[2]]

 chr  start  end    N01   N02   N03 
  2     40    50    30    20     29 

我想得到:

 chr  start  end    N01.a   N04   N05  N01.b   N02  N03 
  1     30    40     30    20     29    NA     NA    NA
  2     40    50     NA    NA     NA    30     20    29   

我尝试没有成功:

labelallgenes <- dfall[1:2,]
dfall.split<- split(dfall, 1:nrow(dfall))
for(k in length(dfall.split)){
dfk <- dfall.split[[k]]
labelallgenes <- cbind.fill(labelallgenes, dfk, fill=NA)}

有些想法? 非常感谢你。

1 个答案:

答案 0 :(得分:0)

假设'df'是一个列表,我们可以使用'Reduce'和'合并'列表元素。

Reduce(function(...) merge(..., by=c('chr', 'start', 'end'), all=TRUE), df)
#   chr start end N01.x N04 N05 N01.y N02 N03
#1   1    30  40    30  20  29    NA  NA  NA
#2   2    40  50    NA  NA  NA    30  20  29

数据

df <- list(structure(list(chr = 1L, start = 30L, end = 40L, N01 = 30L, 
N04 = 20L, N05 = 29L), .Names = c("chr", "start", "end", 
"N01", "N04", "N05"), class = "data.frame", row.names = c(NA, 
-1L)), structure(list(chr = 2L, start = 40L, end = 50L, N01 = 30L, 
N02 = 20L, N03 = 29L), .Names = c("chr", "start", "end", 
"N01", "N02", "N03"), class = "data.frame", row.names = c(NA, -1L)))