急!!R集合操作

0
各位,我的数据框中的元素如下形式,无法对id=5和6的name进行运算
id name
1  AB
2  A
3  B
4  D
5  c("AB","ADF","OK")
6  c("dB","AF","jlOK")
7  FG
8  DS
9  Q
10 A
请问如何对每个元素进行集合操作,比如id=1的name是id=5的name的元素或者子集,得出他们的交集和补集,并且如何得到id=5的name的元素个数(3)?求大神指教
注:AB是 c("AB","ADF","OK")中的元素,但是A不是!
已邀请:
0

marxsong 2016-09-21 回答

R提供了非常强大的集合运算系列函数,
简单的介绍一下这些函数(假设A,B,C为三个集合):
#首先对集合A,B,C赋值
> A<-1:10
> B<-seq(5,15,2)
> C<-1:5
> #求A和B的并集
> union(A,B)
 [1]  1 2  3  4 5  6  7 8  9 10 11 13 15
> #求A和B的交集
> intersect(A,B)
[1] 5 7 9
> #求A-B
> setdiff(A,B)
[1]  1  2 3  4  6  810
> #求B-A
> setdiff(B,A)
[1] 11 13 15
> #检验集合A,B是否相同
> setequal(A,B)
[1] FALSE
> #检验元素12是否属于集合C
> is.element(12,C)
[1] FALSE
> #检验集合A是否包含C
> all(C%in%A)
[1] TRUE
> all(C%in%B)
[1] FALSE
0

dj123jary 2016-09-21 回答

> t_data
   id                name
1   1                  AB
2   2                   A
3   3                   B
4   4                   D
5   5  c("AB","ADF","OK")
6   6 c("dB","AF","jlOK")
7   7                  FG
8   8                  DS
9   9                   Q
10 10                   A
> apply(t_data,1,function(x){length(unlist(str_split(str_replace_all(as.vector(x[2]), "[c()\"]", ""),",")))})
 [1] 1 1 1 1 3 3 1 1 1 1

集合什么的,参考marxsong的答案,看你最终的目的是什么了
补充一下,这里涉及到的几个函数在stringr包中

要回复问题请先登录注册