楼主: winniewang2222
16976 35

[问答] 求助:累加如何进行编程 [推广有奖]

21
winniewang2222 发表于 2014-3-27 23:18:55
danica33 发表于 2014-3-27 23:14
order(a)是a从小到大排列后第i大的元素在原来的向量a中的位置,比如a排列后
sort(a)##a从小到大排列
[ ...
找到方法了,用rank
> a
[1]  1  2  3  3  4  5  6 66  6  7 88 88 99 88  4  4
> rank(a)
[1]  1.0  2.0  3.5  3.5  6.0  8.0  9.5 12.0  9.5 11.0 14.0 14.0 16.0 14.0  6.0  6.0
> d<-rank(a)
> d
[1]  1.0  2.0  3.5  3.5  6.0  8.0  9.5 12.0  9.5 11.0 14.0 14.0 16.0 14.0  6.0  6.0
>

不知道可否对3.5 3.5, 9.5 9.5这样的数字取整呢,因为序号代表一个人的话,不能说第三个半人吧
世上万事,不过是一懒二拖三不读书。

22
jmpamao 发表于 2014-3-27 23:20:47
winniewang2222 发表于 2014-3-27 23:07
这是原来的序号?原来比如最后两个值是4,那序号也不应该是14,13吧...

> a
最后面的 两 个4, 4  在a中的序号 为 15,16 最后两个,对吧

order 后, 看看  15,16 在什么位置, 就是 把4,4,按照大小放前面了。
运行下面看看
a
order(a)
a[order(a)]
已有 1 人评分学术水平 信用等级 收起 理由
winniewang2222 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  信用等级 + 1   查看全部评分

23
danica33 发表于 2014-3-27 23:25:56
winniewang2222 发表于 2014-3-27 23:18
找到方法了,用rank
> a
[1]  1  2  3  3  4  5  6 66  6  7 88 88 99 88  4  4
你要的year是秩啊,看你要怎么处理相等的数的秩,可以看一下rank的帮助,?rank,比如
> rank(a,ties.method="fir")
[1]  1  2  3  4  5  8  9 12 10 11 13 14 16 15  6  7
已有 1 人评分学术水平 信用等级 收起 理由
winniewang2222 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  信用等级 + 1   查看全部评分

24
winniewang2222 发表于 2014-3-27 23:28:33
jmpamao 发表于 2014-3-27 23:20
最后面的 两 个4, 4  在a中的序号 为 15,16 最后两个,对吧

order 后, 看看  15,16 在什么位置, 就 ...
这个比rank更加好,我尝试了order(a[order(a)]),总算得到想要的了!谢谢大家帮忙!

> a
[1]  1  2  3  3  4  5  6 66  6  7 88 88 99 88  4  4
> order(a)
[1]  1  2  3  4  5 15 16  6  7  9 10  8 11 12 14 13
> a[order(a)]
[1]  1  2  3  3  4  4  4  5  6  6  7 66 88 88 88 99
> order(a[order(a)])
[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
>

还有个问题想请教就是,不知道各位是否熟悉核密度估计呢,我查到命令是density(), 我尝试density(a),但是也有问题,我想得到的是新生成一个变量,比如y, y是等于x对应的密度函数值

世上万事,不过是一懒二拖三不读书。

25
winniewang2222 发表于 2014-3-27 23:30:59
danica33 发表于 2014-3-27 23:25
你要的year是秩啊,看你要怎么处理相等的数的秩,可以看一下rank的帮助,?rank,比如
> rank(a,ties.met ...
原来这个方法也可以,谢谢~!记下了^^

还有个问题是关于核密度估计,之前也回复jmpa了,不知道你熟悉吗?
世上万事,不过是一懒二拖三不读书。

26
jmpamao 发表于 2014-3-27 23:39:33
density 会重新模拟数据的。如果你的数据长度小于 512, 模拟到512个。kernel = c("gaussian",
    "epanechnikov", "rectangular", "triangular", "biweight",
    "cosine", "optcosine")

你要查看的话
  1. density(a)$x
  2. density(a)$y
复制代码

已有 1 人评分学术水平 热心指数 收起 理由
winniewang2222 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

27
danica33 发表于 2014-3-27 23:40:25
winniewang2222 发表于 2014-3-27 23:30
原来这个方法也可以,谢谢~!记下了^^

还有个问题是关于核密度估计,之前也回复jmpa了,不知道你熟悉吗 ...
不熟悉,rank(a,ties.method="fir")跟order(a[order(a)]),不是一个意思啊,前者是a对应的秩,后者就是
1:length(a),你的year跟a应该对应吧

28
winniewang2222 发表于 2014-3-27 23:42:00
jmpamao 发表于 2014-3-27 23:39
density 会重新模拟数据的。如果你的数据长度小于 512, 模拟到512个。kernel = c("gaussian",
    "epan ...
> density(a)

Call:
        density.default(x = a)

Data: a (16 obs.);      Bandwidth 'bw' = 20.49

       x                 y            
Min.   :-60.463   Min.   :2.081e-05  
1st Qu.: -5.232   1st Qu.:1.260e-03  
Median : 50.000   Median :3.683e-03  
Mean   : 50.000   Mean   :4.519e-03  
3rd Qu.:105.232   3rd Qu.:5.594e-03  
Max.   :160.463   Max.   :1.335e-02  
> density(a)xdensity(a)y
错误: 意外的符号 in "density(a)xdensity"
>

似乎不行..?
世上万事,不过是一懒二拖三不读书。

29
jmpamao 发表于 2014-3-27 23:44:55
  1. density(a)$x
  2. density(a)$y
复制代码

30
winniewang2222 发表于 2014-3-27 23:45:06
jmpamao 发表于 2014-3-27 23:39
density 会重新模拟数据的。如果你的数据长度小于 512, 模拟到512个。kernel = c("gaussian",
    "epan ...
刚刚页面显示的命令有问题
我尝试了,的确将a拓展为512个数,然后得出密度函数值,那么如果大于512个,是不是每个x,就会有一个对应的y呢?
我需要对kernel的函数进行设定吗,还是这样默认就可以呢
世上万事,不过是一懒二拖三不读书。

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

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