作者sandows (仙道群)
站内Statistics
标题Re: [程式] R矩阵计算问题
时间Sun Jul 11 17:30:19 2010
※ 引述《gsuper (统计的巴比伦塔)》之铭言:
: ※ 引述《Ares0628 (SHOW HAND)》之铭言:
: : [软体程式类别]:
: : R
: : [程式问题]:
: : 资料处理
: : [软体熟悉度]:
: : 新手(不到1个月)
: : [问题叙述]:
: : 一. X=c('abc23','abc2254','abk2225','abc1414','abc1414')
: : 要如何让他照字母数字排序成 abc23 abc1414 abc1414 abc2225 abk2254
: : 用sort排列只会一个一个字元比较
as.vector(unlist(tapply(X,nchar(X),sort)))
[1] "abc23" "abc1414" "abc1414" "abc2254" "abk2225"
这应该分成四行来写
首先用 nchhar 算出 X 的字母数
用 tapply 去按字母数排列
用 unlist 改 tapply 的结果 (去除list)
用 as.vector 改为资料数列
X1 <- nchar (X)
X2 <- tapply(X,X1,sort)
X3 <- unlist(X2)
X4 <- as.vector(X3)
自己试试看吧
: : 二.我想利用A矩阵 另外生成矩阵B
: : 比较第一行资料名字若相同 则合并成一列计算 (这边用sum为例子)
: : A=data.frame(matrix(0,5,4))
: : A[,1]=c('abc23','abc23','abc25','abc25','abc28')
: : A[,2]=c(20,60,40,90,20)
: : A[,3]=c(3,5,1,9,2)
: : A[,4]=c(600,800,100,500,200)
: : A
: : X1 X2 X3 X4
: : 1 abc23 20 3 600
: : 2 abc23 60 5 800
: : 3 abc25 40 1 100
: : 4 abc25 90 9 500
: : 5 abc28 20 2 200
: : B
: : X1 X2 X3 X4
: : 1 abc23 80 8 1400
: : 2 abc25 130 10 600
: : 3 abc28 20 2 200
: A <- A[order(A[,1]) , ]
: B <- cbind( unique(A[,1]) , tapply(A[,2],A[,1],sum),
: + tapply(A[,3],A[,1],sum) , tapply(A[,4],A[,1],sum)
: 为了解这个问题 , 我之前花了一个礼拜 (弱)
: (P.S. 矩阵里面不能有 Missing value 或 NA)
: 另一种写法是用 tapply 找到 index
: 再用 index 叫出特定 matrix
: 再用 rowSums()
: 不过我懒的写了....
一般来说用data.frame的格式会比较简单
以下是一行
data.frame(X1 = names(tapply(A$X2,A$X1,sum)),
X2 = tapply(A$X2,A$X1,sum), X3 =tapply(A$X3,A$X1,sum),
X4=tapply(A$X4,A$X1,sum),row.names=NULL)
X1 X2 X3 X4
1 abc23 80 8 1400
2 abc25 130 10 600
3 abc28 20 2 200
这样就算有漏缺等的话,只要用na的选项在tapply里面调整就好
(因功能而异)
例如
tapply(A$X4,A$X1,sum,na.rm=TRUE)
: : 三.初学R遇到问题都不晓得该用那些函数 有哪些函数可以用 即使HELP也不知道该查什麽
: : 请问一下遇到问题的时候 要怎样知道我该去找哪个函数来用??或是有什麽技巧吗
: 如果是要找特定统计功能
: google " XXXX method with R"
: 如果是跟 Coding 有关的
: 我也很苦恼找不到好的书....
coding 和 function 很靠感觉
我刚学的时候还写了一个跟tapply的一样的function用了快要两年
然後有一天我发现,原来根本有tapply这个功能
我觉得最好的方法就是去上课
有系统性的学个一学期或是一年,会差满多的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.11.170.17
1F:→ gsuper:我觉得最重要的就是平常多学 function , 要用的时後才快 07/11 17:44
2F:→ Ares0628:谢谢 我在练习看看 07/11 17:54
※ 编辑: sandows 来自: 24.11.170.17 (07/11 19:04)
3F:推 onlyyou2:超强 07/11 22:27
4F:推 nuksparkler:什麽都不知道该怎麽用的话 就用指标+回圈 不过比较累 07/14 01:19
5F:→ nuksparkler:尔且R的回圈 跑好慢 = = 不过小量运算应该ok啦 07/14 01:19