在每组数据后插入一个空行

时间:2013-11-28 07:48:42

标签: r

此问题已被要求excel。 How to automatically insert a blank row after a group of data

我想知道在R中是否有相同的功能。

示例:

group <- c("a","b","b","c","c","c","d","d","d","d")
xvalue <- c(16:25)
yvalue <- c(1:10)
df <- data.frame(cbind(group,xvalue,yvalue))
   group xvalue yvalue
1      a     16      1
2      b     17      2
3      b     18      3
4      c     19      4
5      c     20      5
6      c     21      6
7      d     22      7
8      d     23      8
9      d     24      9
10     d     25     10

我想在每个组后面都有一个空行,以便我可以手动检查条目

   group xvalue yvalue
1      a     16      1
2
3      b     17      2
4      b     18      3
5
6      c     19      4
7      c     20      5
8      c     21      6
9
10     d     22      7
11     d     23      8
12     d     24      9
12     d     25     10

感谢

2 个答案:

答案 0 :(得分:12)

首先将所有列转换为字符向量:

df_new <- as.data.frame(lapply(df, as.character), stringsAsFactors = FALSE)

然后您可以创建您正在寻找的输出:

head(do.call(rbind, by(df_new, df$group, rbind, "")), -1 )

#      group xvalue yvalue
# a.1      a     16      1
# a.2                     
# b.2      b     17      2
# b.3      b     18      3
# b.31                    
# c.4      c     19      4
# c.5      c     20      5
# c.6      c     21      6
# c.41                    
# d.7      d     22      7
# d.8      d     23      8
# d.9      d     24      9
# d.10     d     25     10

答案 1 :(得分:7)

Sven确切地回答了你所要求的内容,但我认为你想做的事情通常是个坏主意。

如果您希望实现视觉分离,我建议您只使用split

split(df, df$group)
# $a
#   group xvalue yvalue
# 1     a     16      1
#
# $b
#   group xvalue yvalue
# 2     b     17      2
# 3     b     18      3
#
# $c
#   group xvalue yvalue
# 4     c     19      4
# 5     c     20      5
# 6     c     21      6
#
# $d
#    group xvalue yvalue
# 7      d     22      7
# 8      d     23      8
# 9      d     24      9
# 10     d     25     10

这具有以下优点:(1)视觉分离,(2)易于索引,(3)不转换数据,(4)允许您在数据的不同子集上运行相同的功能。