急!!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不是!
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不是!
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
2 个回复
marxsong 2016-09-21 回答
赞同来自:
简单的介绍一下这些函数(假设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
dj123jary 2016-09-21 回答
赞同来自:
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包中