根据每行的个案数量拆分R数据帧

时间:2014-04-28 19:06:02

标签: r dataframe

如何拆分数据框,如

a <- c("a","a","a","b","b","c","c","d","d","d")
b <- c(1,2,3,1,2,1,2,1,2,3)
df <- data.frame(a,b)

分为仅包含相等长度的单个数据帧,即数据帧中出现三次的所有情况以及两次出现在一个单独的情况中的所有情况?

输出应为:

dfa
a 1
a 2
a 3
d 1
d 2
d 3

dfb
b 1
b 2
c 1
c 2

2 个答案:

答案 0 :(得分:4)

查看?split?ave

split(df, ave(df$b, df$a, FUN = length))
#$`2`
#  a b
#4 b 1
#5 b 2
#6 c 1
#7 c 2
#
#$`3`
#   a b
#1  a 1
#2  a 2
#3  a 3
#8  d 1
#9  d 2
#10 d 3

答案 1 :(得分:0)

它涉及更多,但你可以droplevels使用table

> tab <- table(df$a)
> lapply(3:2, function(x){
      droplevels(df[df$a %in% names(tab)[tab == x], , drop = FALSE])
  })
## [[1]]
##    a b
## 1  a 1
## 2  a 2
## 3  a 3
## 8  d 1
## 9  d 2
## 10 d 3

## [[2]]
##   a b
## 4 b 1
## 5 b 2
## 6 c 1
## 7 c 2