我需要在r中的每一行后使用数据帧进行空白观察?

时间:2015-05-12 11:11:31

标签: r

输出我在数据框中获得的内容

col1 col2 col3 col4
abc        25    35
abc  asd   25    45
def        15    36
erf        23    69
erf  asd   25    36
erf  dfg   85    78

像这样转换

 1. col1 col2 col3 col4  

 2.  
 3. abc        25    35 
 4. abc  asd   25    45 
 5. abc  def   15    36
 6.  
 7. def erf   23    69 
 8.
 8. erf asd   25    36
 9. erf dfg   85    78 
 10 erf fgh   78    89

我需要在2 6和8处进行空白观察。有没有选择?

1 个答案:

答案 0 :(得分:2)

如果我们假设col1col2属于character类,那么快速解决方案就是

res <- do.call(rbind, lapply(split(df, df$col1), function(x) rbind("", x)))
row.names(res) <- NULL
res
#   col1 col2 col3 col4
# 1                    
# 2  abc        25   35
# 3  abc  asd   25   45
# 4                    
# 5  def        15   36
# 6                    
# 7  erf        23   69
# 8  erf  asd   25   36
# 9  erf  dfg   85   78

或使用data.table包(不必假设character类)

library(data.table)
setDT(df)[df[, c(NA, .I), by = col1]$V1]
#    col1 col2 col3 col4
# 1:   NA   NA   NA   NA
# 2:  abc        25   35
# 3:  abc  asd   25   45
# 4:   NA   NA   NA   NA
# 5:  def        15   36
# 6:   NA   NA   NA   NA
# 7:  erf        23   69
# 8:  erf  asd   25   36
# 9:  erf  dfg   85   78