狗汪爪记3—R语言数据操作
今天先对之前的2进行了补充修改,另外写一下R语言对于数据的处理方式,与其他语言相比R语言的确方便许多。
向量化是R的最大优势之一(可以用于减少循环)
gdata包、gtool包、plyr都挺有意思的,大家可以试一下
1、c()
:最基本的命令
其中有几个选项
-
recursive:逻辑值。
如果recursive = TRUE,则函数递归地通过将其所有元素组合到一个向量中的列表(和pairlists)递归下降。(TRUE没有标签可以用了)
示例
- use.names:逻辑指示是否应该保留名称。
- 用途
给一个现有的向量插入或添加元素
> vec <- c(1,3,6,2,7,4,8,1,0)
> vec
[1] 1 3 6 2 7 4 8 1 0
> vecB <- c(vec,4,1)
> vecB
[1] 1 3 6 2 7 4 8 1 0 4 1
2、length()
: 向量的长度
![](https://img.haomeiwen.com/i8453336/34791698d9284826.png)
3、sort()
:对数据进行排序
sort(x, decreasing = FALSE, na.last = NA, ...)
- x:要处理的数据
- decreasing:FALSE(升序),TRUE(降序)
- na.last:用于控制NAS(空值)的处理。
如果为TRUE,则将数据中的缺失值放在最后;
如果FALSE,则放在数据开头; 如果不适用,它们将被删除。
4、rev()
:按倒序方式进行排列
5、order()
:以向量的形式返回按增序或减序排列后的各元素在原始向量中的位置索引 。
6、rank()
:返回各元素的排名序号(rank)所构成的向量,
rank(x, na.last = TRUE,
ties.method = c("average", "first", "last", "random", "max", "min"))
- x:用于设置排序的顺序
- na.last:用于控制NAs的处理方式。
如果为TRUE,则将数据中的缺失值放在最后;
如果FALSE,则先放; 如果不适用,则将其删除;
如果“keep”,他们保持顺序NA。 - ties.method:指定如何处理关系的字符串。
如果所有部分都不相同(或者是没有NAs),则排序定义良好,值为seq_along(x)。 在某些值相等的情况下(称为“ties”),参数ties.method确定相应指数的结果。 - “first”方法导致在每个索引集合处增加值的排列,类似地,
- “last”按减少值进行排列。
- “random”方法将这些按随机顺序排列,
- “average”用它们的平均值替换它们,
-
“max”和“min”分别用它们的最大值和最小值替换它们
之间三个名令的演示
7、unique()
:移除向量中重复出现的元素
8、duplicated()
:判断向量中每个元素是否在它之前的元素中已经出现过
如果TRUE,出现过
如果FALSE,没出现过
对矩阵和数据框进行计算
9、dim()
:矩阵或数据框的维数(大小)
10、nrow()
,ncol()
:行数,列数
11、dimnames()
:行和列的名称
12、names()
,colnames()
:列的名称
13、rownames()
:行的名称
14、cbind()
:合并列
cbind(..., deparse.level = 1)
rbind(..., deparse.level = 1)
-
deparse.level:在非矩阵类参数情况下控制标签结构的整数(对于默认方法):
deparse.level = 0构造无标签; 默认情况下,
deparse.level = 1或2从参数名称中构造标签,请参阅下面的“值”部分。
示意图
15、merge()
:合并两个数据框,相同的标签进行合并
16、rbind()
:合并行
17、apply()
:可以使用另一个给定的函数,来对一个矩阵或数据框的全部行或全部列进行计算
apply(X, MARGIN, FUN, ...)
- x:矩阵或数据框
- MARGIN:1时对全部的行,2时对全部的列
- FUN:要应用的功能:请参阅'详细信息'。 对于+,%*%等函数,函数名称必须反引号或引号。
还有tapply(),lapply(),vapply()等
都类似于函数apply(),对一个列表的每一个组成部分应用某一个函数
- tapply():
- lapply():输出一个列表
- vapply():
- sapply():输出一个向量
18、sweep()
:
sweep(x, MARGIN, STATS, FUN = "-", check.margin = TRUE, ...)
- x:一个 numeric, complex, character 或 logical 向量.
- MARGIN:1时对全部的行,2时对全部的列
- STATS:1时是与行数相同的一组元素,2时是与列数相同的一组元素
- FUN:统计方式
- check.margin:逻辑。
如果为TRUE(默认值),则警告STATS的长度或尺寸与x的指定尺寸不匹配。
当您知道尺寸匹配时,设置为FALSE以获得较小的速度增益。
19、rowSums()
,colSums()
,rowMeans()
,colMeans()
:行和,列和,行平均,列平均
20、ts()
:用于创建一个时间序列对象
ts(data = NA, start = 1, end = numeric(), frequency = 1,
deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )
- data:观察到的时间序列值的vecter或matrix。 数据帧将通过data.matrix强制转换为数字矩阵。 (另请参阅'详细信息'。)
- start:第一次观察的时间。 可以是单个数字,也可以是两个整数的向量,它们将自然时间单位和(1为基数)个样本指定到时间单位中。 请参阅使用第二种形式的示例。
- end:最后一次观察的时间,以与开始相同的方式指定。
- frequency:每单位时间的观察次数。
- deltat:连续观测之间采样周期的一小部分; 例如每月数据为1/12。 应仅提供频率或deltat中的一个。
- ts.eps:时间序列比较容差。 如果频率的绝对差值小于ts.eps,则认为频率相等。
- class:给予结果的类,或者如果为NULL或“无”则为none。 对于多个系列,单个系列的默认值是“ts”,c(“mts”,“ts”,“matrix”)。
- names:多个系列中的系列名称的字符向量:默认为数据的名称,或系列1,系列2,....
21、stack
:将一个数据框的某些列的值串联成单个向量,该函数会输出一个数据框,
第一列为堆叠的向量,
第二列包含一个因子用以指示各个观测的原始出处,
unstack
:执行逆向操作,对方差分析是非常有用的
元素 标签
标签
元素
22、arggregate
:根据一个因子(由参变量by的值指定)将一个数据框分裂为几个子总体并对每一个子总体应用某个预定给定的函数
注:有点像标签合并
23、transform()
:用来对数据框的列进行转换操作,
transform(`_data`, ...)
- _data:要修改的数据,
...:对每个标签类型的数据进行处理
例如:transform(airquality, new = -Ozone, Temp = (Temp-32)/1.8)
逻辑关系计算
24、logical()
:
any(x)
:若有一个x是TRUE,则为TRUE
all(x)
:若全部的x都是TRUE,则为TRUE
all.equal(x,y)
:x是否约等于y,
identical(x,y)
:对于任意x = y,则为TRUE
集合运算
25、is.element(vec,A)
:属于
all(A %in% B)
:包含于(子集)
all(B %in% A)
:超集
intersect(A,B)
:交集
union(A,B)
:并集
setdiff(A,B)
:补集
setdiff(union(A,B),intersect(A,B))
:对称差
提取元素
26、[
:
- [2]:提取第二个元素
- [-2]:除了第二个元素,全部提取
- [2:5] :提取2到5
- vec[vec>4]:大于4的元素提出来
- vec>4:元素是否大于0,大于的为TRUE,小于为FALSE
27、which()
:输出对应于值TRUE的位置索引
which.min
,which.max
:输出最小值的标签,输出最大值的标签
28、replacement
:对一个向量中的元素进行替换与提取的操作,
选择想要替换的元素,然后使用附值符号<-后面紧跟替代目标元素,
需要指定与挑选好的元素同样数目的替代目标元素。
29、array()
:产生排列
array(data = NA, dim = length(data), dimnames = NULL)
- data:要添加的数据。
- dim:维数,数据的长度,行数,列数,组数。
- dimnames:维数的名称。
30、list()
:产生列表
A[c(3,4)]:从A中选出标签为3和4的元素
A[[c(2,3)]]:从A中先检索标签2,然后从中选出3的元素
如果标签名称中有空格,检索时,则要用‘ ' 包起来
31、noquote
,'sQuote','dQuote':抑制输出结果中双引号的显示,
用来显示不同样式的引号。
32、format()
:用来产生个性化的显示,
还有cat()
,sprintf()
,print()
,
33、nchar()
:计算一个字符串中字符的数目,
34、paste()
:用于连接若干个字符串
paste (..., sep = " ", collapse = NULL)
- sep:用于分隔字符的字符串。
- collapse:一个可选的字符串来分隔结果。可用来实现将字符串向量中的元素连接为单个字符串。
35、substring()
:从一个字符串中提取子字符串
substring(x, start, stop)
- start:开始标签
- stop:结束标签
36、strsplit()
:用于分裂一个字符串
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
- x:待处理的字符串
- split:分裂符号
- fix:逻辑。
如果TRUE匹配正确,则使用正则表达式。 优先于Perl。 - perl:逻辑。 应该使用Perl兼容的正则表达式吗?
- useBytes:逻辑。
如果为TRUE,则匹配按逐字节完成,而不是逐字符完成,并且带有标记编码的输入不会被转换。 如果发现有标记为“字节”的任何输入(参见编码),则强制(带警告)。
37、grep
:用来在字符串向量中搜寻某一种模式,它返回字符串向量中包含这一模式的元素的位置索引。
grep(要查找的字符,待处理的所有字符串数据)
返回含有这个字符的数据的标签号
38、gsub
:将字符串向量中所有的元素中具有某一模式的部分以另一个字符串进行替换
gsub(待替换字符,替换字符,待处理的所有字符串数据)
39、sub
:和gsub
类似,只是它只替换 第一个 具有特定模式的字符串中的那一部分。
40、tolower()
, toupper()
:可用来将一个字符串强制变为小写或大写形式。
41、Sys.time
,date()
:可以显示当前的日期和时间
42、Sys.sleep
:控制在给定的秒数后中止一列指令的执行
43、strptime
:可用来从一个字符串中检索日期并将其存入到一个POSIXlt类的R对象中。
strptime(x, format, tz = "")
- x:要转换的对象:strptime的一个字符矢量,它可以转换为strftime的“POSIXlt”对象。(日/月/年)
- fomat :一个字符串。 如果任何元素的时间部分不是午夜,则格式方法的缺省值为“%Y-%m-%d%H:%M:%S”,否则为“%Y-%m-%d”。 如果设置了选项(“digits.secs”),则最多可以打印指定的数字位数秒。
编码 | 描述 |
---|---|
%a | 缩写形式的星期几 |
%A | 星期几的全名 |
%b | 月份的缩写 |
%B | 月份的全名 |
%c | 日期和时间及时区 |
%d | 月份中的天数(01-31) |
%H | 小时,24小时制(0-24) |
%I | 小时,12小时制(0-12) |
%j | 一年中的某天(001-366) |
%m | 月份(01-12) |
%M | 分钟(00-59) |
%S | 秒数(00-61),含2闰秒 |
%U | 一年的星期数(00-53) 第一个周日记为第1周第1天 |
%w | 星期的天数(0-6);周日是0 |
%W | 一年的星期数(00-53)第一个周一记为第1周第1天 |
%x | 特定时区的日期 |
%X | 特定时区的时间 |
%y | 不带世纪的年份 |
%Y | 有世纪的年份 |
%z | 从格林威治时间开始算的偏移;‘0800',为格林威治往西8小时 |
%Z | 字符串形式的时区(仅输出) |
44、``:
命令 | 描述 |
---|---|
sec(0-61) | 秒数 |
min(0-59) | 分钟数 |
hour(0-23) | 小时数 |
mday(1-31) | 月份中的日数 |
mon(0-11) | 从年度第1个月开始算的月数 |
year | 从1900年开始算的星期的天数 |
wday(0-6) | 从周日开始算的星期的天数 |
yday(0-365) | 一年的天数 |
isdat | 夏时制标志:若DST被观测到取正值,否则取正值,否则为0 |
45、as.POSIXct
,as.POSIXlt
:
- 1.会给出一个数值向量,
- 2.返回的结果可用一个由向量构成的列表来表示
之后会继续补充,请各位前辈们指正