zoukankan      html  css  js  c++  java
  • 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

      > typeof(12)
      [1] "double"

    # 大/小写字母
    > 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
  • 相关阅读:
    vue + element-ui实现动态多级表头
    Linux 系统编程 学习:11-线程:线程同步
    Linux 系统编程 学习:10-线程:线程的属性
    Linux 系统编程 学习:9-线程:线程的创建、回收与取消
    Linux 网络编程的5种IO模型:信号驱动IO模型
    Linux 系统编程 学习:8-基于socket的网络编程3:基于 TCP 的通信
    Linux 系统编程 学习:6-基于socket的网络编程1:有关概念
    Linux 系统编程 学习:7-基于socket的网络编程2:基于 UDP 的通信
    Linux 系统编程 学习:5-进程间通信2:System V IPC
    Linux 系统编程 学习:2-进程间通信1:Unix IPC(1)管道
  • 原文地址:https://www.cnblogs.com/echo-coding/p/8796676.html
Copyright © 2011-2022 走看看