R 数据分析

目录:

  • windows命令行中执行R
  • dataframe
  • 常用函数、变量

1、windows命令行中执行R

前提:已经把R的命令目录加入了系统路径中。

 在windows中,命令行执行R可以用以下两种方式:

(1)RCMD BATCH xxx.r

  • 这种方式也可以写成”r cmd BATCH“、”rcmd BATCH“、”R CMD BATCH“,这几个命令都是一样的,随便你用哪个
  • 这种方式的输出结果不是直接显示在命令行中,而是会在r文件相同路径下,自动创建一个xxx.r.Rout文本文件,输出的内容在这个文件里
  • 但是这种方式用commandArgs()函数得不到传递的参数,而是生成了一个名为第一个参数的文本文件代替上面的xxx.r.Rout文件

举个例子,有以下test.r程序:

1 args = commandArgs(trailingOnly=TRUE)
2 print(args[2])
3 print('do a test')

比如在命令行输入”RCMD BATCH test.r 4 5“,就会生成一个名为4的文本文件,文件内容如下,程序打印的第二个参数是NA,实际上应该是5;

 (2)Rscript xxx.r

  • 这种方式的输出结果直接显示在命令行中,不会生成其他输出文件
  • 这种方式可以用commandArgs()函数得到传递的参数

但是得到参数的索引由函数的trailingOnly参数决定,当trailingOnly=TRUE时,参数索引从1开始;

当trailingOnly=TRUE时,参数索引从6开始,因为:

args[1]= "C:\\Program Files\\R\\R-3.4.4\\bin\\x64\\Rterm.exe"
args[2]= "--slave"
args[3]= "--no-restore"
args[4]="--file=test.r"
args[5]="--args"
args[6]=="4"
args[7]=="do a test"

2、dataframe

创建空数据框

# 创建0行0列的数据框
df_empty = data.frame()
# 创建和df有同样多的列,0行的数据框
> df_r = df[, FALSE]
data frame with 0 columns and 4 rows
# 创建一个行数为0,列数、列名和df相同的数据框
> df_c = df[FALSE, ]
[1] one   two   three
<0 行> (或0-长度的row.names)

创建非空数据框

# 指定列名
> df = data.frame(one=c(1,2,3,4),two=c(4,5,6,0),three=c(32,21,34,32))
  one two three
1   1   4    32
2   2   5    21
3   3   6    34
4   4   0    32
# 不指定列名
> df = data.frame(c(1,2,3,4),c(4,5,6,0),c(32,21,34,32))
  c.1..2..3..4. c.4..5..6..0. c.32..21..34..32.
1             1             4                32
2             2             5                21
3             3             6                34
4             4             0                32
# 自动匹配最长的行数
> data.frame(one_t=c(5,2),two=c(12),three=c(9))
  one_t two three
1     5  12     9
2     2  12     9
# 指定行名和列名
> data.frame(one=c(1,2,3,4),two=c(4,5,6,0),three=c(32,21,34,32),row.names = c('a','b','c','d'))
  one two three
a   1   4    32
b   2   5    21
c   3   6    34
d   4   0    32

访问元素

# 默认访问元素是对列而言的,可以通过加逗号来限定

## 用索引访问
# 访问列
> df[1:2]
  one two
1   1   4
2   2   5
3   3   6
4   4   0
> df[,1:2]
  one two
1   1   4
2   2   5
3   3   6
4   4   0

# 访问行
> df[c(1,3),]
  one two three
1   1   4    32
3   3   6    34
> df[1:2,]
  one two three
1   1   4    32
2   2   5    21
# 取反
> df[-c(1,3),]
  one two three
2   2   5    21
4   4   0    32


## 用列名和行名访问
# 列名
> df['one']
  one
1   1
2   2
3   3
4   4
> df[,'one']
[1] 1 2 3 4
> df['one',]
   one two three
NA  NA  NA    NA

# 行名
> df['1',]
  one two three
1   1   4    32
> df['1']
Error in `[.data.frame`(df, "1") : undefined columns selected

数据筛选

# 条件语句选择列
> df[which(df$one>2),]
  one two three
3   3   6    34
4   4   0    32

# 取反
> df[-which(df$one>2),]
  one two three
1   1   4    32
2   2   5    21

# 支持逻辑符,&和,|或
> df[which(df$one>1 & df$two>0),]
  one two three
2   2   5    21
3   3   6    34

判断是否为数据框

> is.data.frame(df)
[1] TRUE

修改行名和列名

> names(df)
[1] "one"   "two"   "three"
> names(df)[1]='one_m'
> names(df)
[1] "one_m" "two"   "three"

> colnames(df)
[1] "one"   "two"   "three"
> colnames(df)[1]='one_t'
> colnames(df)
[1] "one_t" "two"   "three"

> rownames(df)
[1] "1" "2" "3" "4"
> rownames(df)[1]='9'
> rownames(df)
[1] "9" "2" "3" "4"

cbind 列连接

# 当df_n的行数和df的行数一样时
> data.frame(one=c(9,8,7,6))
  one
1   9
2   8
3   7
4   6
> cbind(df,df3)
  one two three one
1   1   4    32   9
2   2   5    21   8
3   3   6    34   7
4   4   0    32   6

# 当df_n的行数小于df,但是df的行数是df_n的整数倍时
> df2 = data.frame(one=c(5),two=c(12),three=c(9))
  one two three
1   5  12     9
> cbind(df,df2)
  one two three one two three
1   1   4    32   5  12     9
2   2   5    21   5  12     9
3   3   6    34   5  12     9
4   4   0    32   5  12     9

# 甚至这样的时候
> cbind(df,data.frame(one=c(5,2),two=c(12),three=c(9)))
  one two three one two three
1   1   4    32   5  12     9
2   2   5    21   2  12     9
3   3   6    34   5  12     9
4   4   0    32   2  12     9

当被df_n的行数大于df时,会失败

> df4=data.frame(one=c(9,8,7,6,12))
> cbind(df,df4)
Error in data.frame(..., check.names = FALSE) : 
  参数值意味着不同的行数: 4, 5

虽然df_n的行数小于df,但df不是df_n行数的整数倍时,也会失败

> cbind(df,data.frame(one=c(5,2,3),two=c(12),three=c(9)))
Error in data.frame(..., check.names = FALSE) : 
  参数值意味着不同的行数: 4, 3

rbind 行连接

> rbind(df, data.frame(one_t=c(5),two=c(12),three=c(9)))
  one_t two three
9     1   4    32
2     2   5    21
3     3   6    34
4     4   0    32
1     5  12     9

当数据框的列名不一致、列数目不一致时,都会失败

> rbind(df, data.frame(one=c(5,2,1,2),two=c(12,4,6,8),three=c(9,4,2,1)))
Error in match.names(clabs, names(xi)) : 名字同原来已有的名字不相对

> rbind(df, data.frame(one_t=c(5),two=c(12),three=c(9),four=c(4)))
Error in rbind(deparse.level, ...) : 变量的列数不对

其他

#数据框的长度是列的数目
> length(df)
[1] 3

# 列数
> ncol(df)
[1] 3

# 行数
> nrow(df)
[1] 4

3、基本统计函数

> sum(c(1,2,3))
[1] 6
> mean(c(1,2,3))
[1] 2
> var(c(1,2,3))
[1] 1
> sort(c(2,1,3))
[1] 1 2 3

3、常用函数、变量

# 查看数据结构和类型
> mode(df)
[1] "list"

> class(df)
[1] "data.frame"> str(df)
'data.frame':    4 obs. of  3 variables:
 $ one_t: num  1 2 3 4
 $ two  : num  4 5 6 0
 $ three: num  32 21 34 32
# 大/小写字母
> LETTERS[1:3]
[1] "A" "B" "C"
> letters[1:3]
[1] "a" "b" "c"
# 可放回抽样
> sample(c(1,2,3,4), 10, replace = TRUE)
 [1] 2 3 1 2 3 3 4 3 3 4
# 判断是否为空, 返回一个同类型(数组)的布尔值
> is.na(c(1,2,3,NaN))
[1] FALSE FALSE FALSE  TRUE
# generating regular suquences
> 1:5
[1] 1 2 3 4 5
> 2*1:5
[1]  2  4  6  8 10
> seq(1,5)
[1] 1 2 3 4 5
# 设定序列间隔
> seq(1,5,0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
# 固定序列长度
> seq(1,5,length.out = 4)
[1] 1.000000 2.333333 3.666667 5.000000
# 重复整个序列
> rep(c(1,2,3), times=5)
 [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
# 重复序列单个元素
> rep(c(1,2,3), each=5)
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Django Scrapy

倒排索引

主楼搜索引擎的主流算法 倒排索引源于实际应用中需要根据属性的值来记录,这种只能怪索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录开...

3536
来自专栏北京马哥教育

正确使用 dd 测试磁盘读写速度

问: 以下几种方式测试磁盘读写速度有什么区别? dd bs=1M count=128 if=/dev/zero of=test dd b...

3166
来自专栏性能与架构

分布式队列实现思路

分布式队列简单理解就是: 帮助我们实现跨进程、跨主机、跨网络的数据共享和数据传递 (之前文章 "分布式消息队列" 介绍的更详细一点) zookeeper是一个...

3547
来自专栏L宝宝聊IT

MySQL架构组成、逻辑模块组成

Mysql逻辑结构可以看成是二层架构,第一层通常叫做SQL Layer,在mysql数据库系统处理底层数据之前的所有工作都在这一层完成的,包括权...

673
来自专栏性能与架构

Mysql体系结构

客户端连接器 mysql为外部程序提供的客户端connector,例如 PHP JAVA .NET RUBY 连接管理 管理客户端连接的相关操作,例如 ...

3357
来自专栏「3306 Pai」社区

关于MySQL 8.0的几个重点,都在这里

在MySQL8.0中重新设计了redo log,主要改进fsync,使得效率更高,减少锁,优化flush机制,不会频繁flush。同时,支持更高用户并发请求。

680
来自专栏小小挖掘机

三分钟Python充电-解压序列赋值给多个变量

""" 问题:现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? """ """ 解决方案:任何的序列(或者是可迭代对象)可以...

3426
来自专栏有趣的django

CRM客户关系管理系统(九) 第九章、filter_horizontal优化和kingadmin删除功能

1160
来自专栏开发与安全

从零开始学C++之标准库类型(三):map 类简介和例程

一、标准库的map类型 使用map得包含map类所在的头文件 template < class Key, class Type, cla...

1750
来自专栏乐沙弥的世界

Percona XtraDB Cluster集群状态监控(PXC 5.7)

每个节点可以有不同的集群视图。没有集中化监视节点。为了追踪问题的来源,您必须独立监控每个节点。

640

扫码关注云+社区