R语言 排序 次条件
用order函数 数字从大到小,所以是倒序列,开启order中的倒序模式会导致所有关联的sort都是倒序,我们得用一个小技巧:负号。
(order的作用是帮你拿到行的index,如此所有排序都是关联的。) 假如你数据叫data data < data[order(data[[2]], data[[1]]), ]data如此你的第二列数字会是取了相反数再sort,所以是倒序,而第一列是正排序,按照字母表顺序。
放在第一个位置的data[[2]]就是主条件,在后面的是次条件,次次条件。
如何用r语言写repeat语句
一、循环和向量化
1、控制结构
(1)条件语句
if(条件) 表达式1 else 表达式2
(2)循环(loops)
for :for(变量 in 变量) 表达式
while while(条件)表达式
repeat repeat 表达式
三者略有区别:若知道终止条件(循环次数)就用for循环,若无法知道运行次数,则用while和repeat循环,repeat循环利用循环体的break语句跳出循环
R语言
我理解,你的意思是循环的判断,当最后一项为1,且第一项为0 的时候,那么这两者交换;
但是,代码表示的逻辑是,不论是不是最后一项,只要不满足当前项为1,下一项为0,就做else块中的代码;可见当i=1,5,6,7,8,9,10时,都执行了else中的代码;
最后,按照你的风格,修改如下:
redrowmove<function(x){
for(i in 1:(length(x)1)){
if(x[i]==1 && x[i+1]==0){
x[i]=0
x[i+1]=1
}
}
if(x[length(x)]==1 && x[1]==0){
x[length(x)]=0
x[1]=1
}
return(x)
}
关于R语言函数
R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能。
但是初学者往往认为编写R函数十分困难,或者难以理解。这里对如何编写R函数进行简要的介绍。
函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让R脚本程序更为简洁,高效。
同时也增加了可读性。一个函数往往完成一项特定的功能。
例如,求标准差sd,求平均值,求生物多样性指数等。R数据分析,就是依靠调用各种函数来完成的。
但是编写函数也不是轻而易举就能完成的,需要首先经过大量的编程训练。特别是对R中数据的类型,逻辑判别、下标、循环等内容有一定了解之后,才好开始编写函数。
对于初学者来说,最好的方法就是研究现有的R函数。因为R程序包都是开源的,所有代码可见。
研究现有的R函数能够使编程水平迅速提高。 R函数无需首先声明变量的类型,大部分情况下不需要进行初始化。
一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。1. 函数名称,即要编写的函数名称,这一名称就作为将来调用R函数的依据。
2. 函数声明,包括 < function, 即声明该对象的类型为函数。3. 函数参数,这里是输入的数据,函数参数是一个虚拟出来的一个对象。
函数参数所等于的数据,就是在函数体内部将要处理的值,或者对应的数据类型。 函数体内部的程序语句进行数据处理,就是对参数的值进行处理 ,这种处理只在调用函数的时候才会发生。
函数的参数可以有多种类型。R help的界面对每个函数,及其参数的意义及所需的数据类型都进行了说明。
4. 函数体常常包括三部分.(1). 异常处理输入的数据不能满足函数计算的要求,或者类型不符, 这时候一定要设计相应的机制告诉用户,输入的数据在什么地方有错误。 错误又分为两种。
第一种, 如果输入的数据错误不是很严重,可以经过转换,变为符合处理要求的数据时, 此时只需要给用户一个提醒,告知数据类型不符,但是函数本身已经 进行了相应的转换。第二种,数据完全不符合要求,这种情况下,就 要终止函数的运行,而告知因为什么,函数不能运行。
这样,用户在 使用函数的情况先才不至于茫然。(2). 运算过程包括具体的运算步骤。
运算过程和该函数要完成的功能有关。R运算过程中,应该尽量减少循环的使用,特别是嵌套循环。
R提供了 apply,replicate等一系列函数,来代替循环,应该尽量应用这些函数, 提高效率。 如果在R中实在太慢,那么核心部分只能依靠C或者Fortran 等语言编写,然后再用R调用这些编译好的模块,达到更高的效率。
运算过程中,需要大量用到if等条件作为判别的标准。if和while都是需要数据TRUE/FALSE这样的逻辑类型变量,这就意味着,if内部,往往是对条件的判别,例如 *, *, *c等等,或者对大小的比较,如,if(x > 0), if(x == 1), if(length(x)== 3)等等。
if后面,如果是1行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。
例子:## if与条件判断* < function(a, b, method = "add">
R语言中符合条件筛选行
如果两个数据集的变量完全一样的话可以直接这样 :
newdata<merge(longlist,shortlist,all=FALSE)
得到的就是两个的交集。
如果变量不同的话,可以接着刚才操作,设定变量x用来标注longlist中的id是否也在shorlist中出现过:
id<newdata$id
x<c(“true”)
a<cbind(id,x)
a<*(a)
longlist<merge(longlist,a,all=TRUE)
然后longlist中就会多出x变量,与shortlist相同的id后面x为true