楼主: sosmall1181
8726 42

[问答] R语言矩阵计算 [推广有奖]

31
sosmall1181 发表于 2013-12-2 15:34:34
jmpamao 发表于 2013-12-2 15:10
语法应该没有什么问题,  会不会这个细节  比如  人民大学,清华大学 #中文的逗号。此时方便的改法 可以  ...
你的意思是last矩阵中两个学校间的 逗号,在aggregate 中改成中文的逗号吗?

32
jmpamao 发表于 2013-12-2 15:46:30
sosmall1181 发表于 2013-12-2 15:34
你的意思是last矩阵中两个学校间的 逗号,在aggregate 中改成中文的逗号吗?
意思是说 这里的逗号要一致##要注意中文输入的时候,逗号问题

你最好能附上 一段数据

33
sosmall1181 发表于 2013-12-2 15:51:18
jmpamao 发表于 2013-12-2 15:46
意思是说 这里的逗号要一致##要注意中文输入的时候,逗号问题

你最好能附上 一段数据
应该不是逗号一致性的问题。last矩阵如下:
    X1                    X2        X3  X4                    X5        X6
1   Al          中国科技大学      2004 CCD 北京物资学院,人民大学 2001,2004
2   Al          中国科技大学      2004  De              北京大学      2001
3   Al          中国科技大学      2004  Er          中国科技大学      2005
4   Al          中国科技大学      2004  Fd     人民大学,清华大学 2000,2004
5   Al          中国科技大学      2004  Pl     人民大学,清华大学 2003,2007
6  CCD 北京物资学院,人民大学 2001,2004  De              北京大学      2001
7  CCD 北京物资学院,人民大学 2001,2004  Er          中国科技大学      2005
8  CCD 北京物资学院,人民大学 2001,2004  Fd     人民大学,清华大学 2000,2004
9  CCD 北京物资学院,人民大学 2001,2004  Pl     人民大学,清华大学 2003,2007
10  De              北京大学      2001  Er          中国科技大学      2005
11  De              北京大学      2001  Fd     人民大学,清华大学 2000,2004
12  De              北京大学      2001  Pl     人民大学,清华大学 2003,2007
13  Er          中国科技大学      2005  Fd     人民大学,清华大学 2000,2004
14  Er          中国科技大学      2005  Pl     人民大学,清华大学 2003,2007
15  Fd     人民大学,清华大学 2000,2004  Pl     人民大学,清华大学 2003,2007

34
jmpamao 发表于 2013-12-2 17:07:18
sosmall1181 发表于 2013-12-2 15:51
应该不是逗号一致性的问题。last矩阵如下:
    X1                    X2        X3  X4               ...
如果你非要用 intersect 来做,要注意 intersect 返回的是一个向量,有可能会出现 [1] ”人大" "qinghua" ".."要变为一个字符串。paste(..collpase=)
  1. last<- read.table(text="X1                    X2        X3  X4                    X5        X6
  2. Al          中国科技大学      2004 CCD 北京物资学院,人民大学 2001,2004
  3. Al          中国科技大学      2004  De              北京大学      2001
  4.    Al          中国科技大学      2004  Er          中国科技大学      2005
  5.    Al          中国科技大学      2004  Fd     人民大学,清华大学 2000,2004
  6.    Al          中国科技大学      2004  Pl     人民大学,清华大学 2003,2007
  7.   CCD 北京物资学院,人民大学 2001,2004  De              北京大学      2001
  8.   CCD 北京物资学院,人民大学 2001,2004  Er          中国科技大学      2005
  9.   CCD 北京物资学院,人民大学 2001,2004  Fd     人民大学,清华大学 2000,2004
  10.   CCD 北京物资学院,人民大学 2001,2004  Pl     人民大学,清华大学 2003,2007
  11.   De              北京大学      2001  Er          中国科技大学      2005
  12.   De              北京大学      2001  Fd     人民大学,清华大学 2000,2004
  13.   De              北京大学      2001  Pl     人民大学,清华大学 2003,2007
  14.   Er          中国科技大学      2005  Fd     人民大学,清华大学 2000,2004
  15.   Er          中国科技大学      2005  Pl     人民大学,清华大学 2003,2007
  16.   Fd     人民大学,清华大学 2000,2004  Pl     人民大学,清华大学 2003,2007",header=T,stringsAsFactors=F)
  17. last_v=apply(last,1,function(i){
  18.   value=intersect(unlist(strsplit(as.character(i[2]),split=",")),
  19.             unlist(strsplit(as.character(i[5]),split=",")))
  20.   value=paste(value,collapse=",")
  21.      })
  22. dat=data.frame(ID1=last$X1,ID2=last$X4,value=last_v)
  23. dat[dat[,3]!="",]
  24. #> dat[dat[,3]!="",]
  25. #   ID1 ID2             value
  26. #3   Al  Er      中国科技大学
  27. #8  CCD  Fd          人民大学
  28. #9  CCD  Pl          人民大学
  29. #15  Fd  Pl 人民大学,清华大学
复制代码


35
sosmall1181 发表于 2013-12-2 17:11:23
jmpamao 发表于 2013-12-2 17:07
如果你非要用 intersect 来做,要注意 intersect 返回的是一个向量,有可能会出现 [1] ”人大" "qinghua" ...
我第一反应就是用intersect来做,还有其他方法么

36
jmpamao 发表于 2013-12-2 17:44:02
sosmall1181 发表于 2013-12-2 17:11
我第一反应就是用intersect来做,还有其他方法么
简单点就是:
  1. last_v=apply(last,1,function(i){
  2.   a=unlist(strsplit(as.character(i[2]),split=","))
  3.   b=unlist(strsplit(as.character(i[5]),split=","))
  4.   paste(a[a%in%b],collapse=",")  
  5.      })
复制代码

37
sosmall1181 发表于 2013-12-2 18:07:18
jmpamao 发表于 2013-12-2 17:44
简单点就是:
好吧。。。

38
sosmall1181 发表于 2013-12-4 18:08:29
jmpamao 发表于 2013-12-2 17:07
如果你非要用 intersect 来做,要注意 intersect 返回的是一个向量,有可能会出现 [1] ”人大" "qinghua" ...
问一下,如何将list转换成矩阵这种形式啊数据如下:
$`1`
  ID1 ID2      sch relation_time_1
1  Pl CCD 人民大学               0
2  Pl  Fd 人民大学               0

$`2`
  ID1 ID2      sch relation_time_1
1  Pl  Fd 清华大学               1

$`3`
  ID1 ID2          sch relation_time_1
1  Al  Er 中国科技大学               1

$`4`
[1] ID1             ID2             sch             relation_time_1
<0 行> (或0-长度的row.names)

$`5`
  ID1 ID2      sch relation_time_1
1 CCD  Fd 人民大学               0

$`6`
[1] ID1             ID2             sch             relation_time_1
<0 行> (或0-长度的row.names)

$`7`
[1] ID1             ID2             sch             relation_time_1
<0 行> (或0-长度的row.names)

$`8`
[1] ID1             ID2             sch             relation_time_1
<0 行> (或0-长度的row.names)
想变成
    ID1 ID2 sch relation_time_1
1  Pl CCD 人民大学               0
2  Pl  Fd 人民大学               0
3  Pl  Fd 清华大学               1
4  Al  Er 中国科技大学               1
5 CCD  Fd 人民大学               0

39
jmpamao 发表于 2013-12-4 19:00:40
sosmall1181 发表于 2013-12-4 18:08
问一下,如何将list转换成矩阵这种形式啊数据如下:
$`1`
  ID1 ID2      sch relation_time_1
我举例你看看
  1. aa<-array(c(80,22,9,9,20,1,3,0,6,37,0,58,8,1,35,2,0,9),
  2.           dim=c(3,3,2),dimnames=list(A=c("A1","A2","A3"),B=c("B1","B2","B3"),C=c("C1","C2")))
  3. #ab=apply(aa,2,rbind)
  4. ab=apply(aa,2,function(x)x[])
  5. ab=as.data.frame(ab)
复制代码

40
jmpamao 发表于 2013-12-4 21:08:26
sosmall1181 发表于 2013-12-4 18:08
问一下,如何将list转换成矩阵这种形式啊数据如下:
$`1`
  ID1 ID2      sch relation_time_1
你这个list应该可以合并掉。
  1. aa <- list(b=data.frame(id=c("pl","p2"),id2=c("er","ee"),sch=c("hongda","qh"),relation=c(1,0)),
  2.            b2=data.frame(id="ccd",id2="uer",sch="zhongda",relation=1),
  3.            b3=data.frame(id="ocd",id2="uor",sch="yngda",relation=1)
  4.           )

  5. do.call(rbind,lapply(1:length(aa),function(i){
  6.   ab=as.data.frame(aa[i])
  7.    colnames(ab)=c("id","id2","sch","re")
  8.    return(ab)
  9.    }))
复制代码
  1. ##循环比较清晰些
  2. ac<-NULL
  3. for(i in 1:length(aa)){
  4. af= as.data.frame(aa[i]);colnames(af)=c("id","id2","sch","re")
  5. ac=rbind(af,ac)
  6. }
  7. ac
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 17:42