0

我有一个数据框:

> df <- data.frame(ID=c('1','1','1','1','1'), Type=c('a','a','b','c','c'), value=c(10,2,5,3,7))

  ID Type value
1  1    a    10
2  1    a     2
3  1    b     5
4  1    c     3
5  1    c     7

我想将其拆分为子组列表,以便每个子组包含 2 种类型。

所以 subgroup1 将具有类型 a 和 b

  ID Type value
1  1    a    10
2  1    a     2
3  1    b     5

并且 subgroup2 将具有类型 b 和 c

  ID Type value
3  1    b     5
4  1    c     3
5  1    c     7

并且 subgroup3 将具有类型 c 和 d ..... 等等

有没有办法做到这一点?

4

2 回答 2

2

我们可以获取列中的唯一值,Type并一次从数据框 2 级中选择行。

uniq_lvls <- unique(df$Type)
lapply(seq_along(uniq_lvls)[-length(uniq_lvls)], function(x) 
                subset(df, Type %in% uniq_lvls[x:(x + 1)]))

#[[1]]
#  ID Type value
#1  1    a    10
#2  1    a     2
#3  1    b     5

#[[2]]
#  ID Type value
#3  1    b     5
#4  1    c     3
#5  1    c     7
于 2019-12-13T08:10:48.070 回答
0

这是一个base R产生这种子组的解决方案,在哪里使用split()rbind(),即,

subgrps <- lapply(seq(length(dfs <- split(df,df$Type))-1), 
              function(k) Reduce(rbind,dfs[k+0:1]))

这样

> subgrps
[[1]]
  ID Type value
1  1    a    10
2  1    a     2
3  1    b     5

[[2]]
  ID Type value
3  1    b     5
4  1    c     3
5  1    c     7
于 2019-12-13T08:50:21.313 回答