如何拆分数据框,如
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
答案 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