6

如何拆分以下 data.frame

df <- data.frame(var1 = c("a", 1, 2, 3, "a", 1, 2, 3, 4, 5, 6, "a", 1, 2), var2 = 1:14)

进入/组列表

a 1
1 2
2 3
3 4

a 5
1 6
2 7
3 8
4 9
5 10
6 11

a 12
1 13
2 14

所以基本上,第 1 列中的值“a”是我想要拆分数据框的标签/标识符。我知道拆分功能,但这意味着我必须添加另一列,因为从我的示例中可以看出,组的大小可能会有所不同,我不知道如何自动创建这样一个虚拟列以满足我的需要。

有什么想法吗?

干杯,

斯文

4

2 回答 2

12

您可以找到索引向量的哪些值等于“a”,然后基于该值创建一个分组变量,然后使用拆分。

df[,1] == "a"
# [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
#[13] FALSE FALSE
cumsum(df[,1] == "a")
# [1] 1 1 1 1 2 2 2 2 2 2 2 3 3 3
split(df, cumsum(df[,1] == "a"))
#$`1`
#  var1 var2
#1    a    1
#2    1    2
#3    2    3
#4    3    4
#
#$`2`
#   var1 var2
#5     a    5
#6     1    6
#7     2    7
#8     3    8
#9     4    9
#10    5   10
#11    6   11
#
#$`3`
#   var1 var2
#12    a   12
#13    1   13
#14    2   14
于 2012-07-09T19:56:46.390 回答
0

您可以创建一个循环,循环遍历数据框的整个第一列,并将非数字字符的位置保存在向量中。因此,你会有类似的东西:

data <- df$var1 #this gives you a vector of the values you'll sort through

positions <- c()

for (i in seq(1:length(data))){
    if (is.numeric(data[i]) == TRUE) {
        #nothing
    }
    else positions <- append(positions, i) #saves the positions of the non-numeric characters
}

有了这些位置,您应该没有问题从那里访问拆分数据框。这只是在位置向量中的值之间使用序列的问题。

于 2012-07-09T19:58:59.207 回答