ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

R语言学习笔记

2021-03-16 15:01:28  阅读:110  来源: 互联网

标签:www 语言 Runoob 笔记 学习 ----- print com id


1.基础

1.1包

#查看包的安装目录
print(.libPaths())

#查看已安装的包
#library()

#查看已载入的包
print(search())

# 例:安装 XML 包 
#install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/")

#查看是否安装成功:
#any(grepl("XML",installed.packages()))

[1] "C:/ProgramData/Anaconda3/Lib/R/library"
[1] ".GlobalEnv"        "jupyter:irkernel"  "package:stats"    
[4] "package:graphics"  "package:grDevices" "package:utils"    
[7] "package:datasets"  "package:methods"   "Autoloads"        
[10] "package:base"     

1.2查看/修改当前工作目录

# 当前工作目录
print(getwd())

# 设置当前工作目录
setwd("E:/projectR_test")

# 查看当前工作目录
print(getwd())
[1] "E:/projectR_test"
[1] "E:/projectR_test"

1.3赋值、输出、查看/释放已定义变量

a.1=1
a.2<-2
a.3<<-3
4->a.4
5->>a.5
print(a.1)
print(a.2)
print(a.3)
print(a.4)
print(a.5)
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

“=和箭头“都可用于赋值,其中箭头总指向变量名
print()只能输出一个变量

print(ls())
rm(a.3)
print(ls())
[1] "a.1"  "a.2"  "a.3"  "iris"
[1] "a.1"  "a.2"  "iris"

ls()用于查看已定义的变量
rm()用于释放已定义的变量

1.4写入/读取文件

cat(1, "加", 1, "等于", 2, '\n')
cat("\n")#可以作输出使用:如输出一个换行符
cat("content\n", file="F:/R_project_ben/file1.txt", append=TRUE)
1 加 1 等于 2 

cat()用于拼接字符串
文件可以不存在,但是文件夹必须存在
此时是追加写入。若不加append,默认为false,覆盖写入

readLines("F:/R_project_ben/file1.txt") #读文件

‘content’

文件中每一行的行末必须有换行符\n

其他-----------------------------

注释:单行 ‘多行’ “多行”

1.5循环

a<-1
repeat{
    a=a+1
    print(a)
    if(a>2)break
}

v <- LETTERS[1:4]
for ( i in v) {
   print(i)
}
[1] 2
[1] 3
[1] "A"
[1] "B"
[1] "C"
[1] "D"

Jupyter只要运行一次无限循环,点击中断服务也没用,必须重启

while类似于其他语言

next类似于continue

LETTERS内置向量

1.6判断:if;switch;

x <- switch(
   3,
   "google",
   "runoob",
   "taobao",
   "weibo"
)
print(x)

you.like<-"runoob"
switch(you.like, google="www.google.com", runoob = "www.runoob.com", taobao = "www.taobao.com")
[1] "taobao"

‘www.runoob.com’

switch()的第一个参数如果是数字,返回后面的值,此时返回第三个

如果是字符串,返回字符串对应的值

2.函数、内置函数、显示格式控制

2.1函数

func1 <- function(a) {
    print(a)
 }
 
# 调用函数,并传递参数
func1(6)
[1] 6

R语言对于计算是懒惰的,即使调用时没有传参,如果函数内没有使用也不会报错

2.2数学函数

#三角函数:弧度制
print(sin(pi/6))
print(cos(pi/4))
print(tan(pi/3))

#反三角函数
print(asin(0.5))
print(acos(0.7071068))
print(atan(1.732051))
[1] 0.5
[1] 0.7071068
[1] 1.732051
[1] 0.5235988
[1] 0.7853981
[1] 1.047198
print(sqrt(4))
print(exp(1))#e的n次方
print(log(2,4))#后面的是底数
print(log10(100))#默认底数为10

print(ceiling(1.9))#向上取整
print(floor(2.1))#向下取整

print(7%%2)#整除求余
print(7%/%2)#整除

#求最值
print(max(1:5))
print(min(1:5))

print(sum(1:5))
print(mean(1:5))#平均值
print(sd(1:5))#标准差
print(var(1:5))#方差
print(range(1:5))#取值范围
[1] 2
[1] 2.718282
[1] 0.5
[1] 2
[1] 2
[1] 2
[1] 1
[1] 3
[1] 5
[1] 1
[1] 15
[1] 3
[1] 1.581139
[1] 2.5
[1] 1 5
#round(n)四舍五入取整
print(round(1.5))
print(round(1.4))

#round(m,n)保留n位小数四舍五入
print(round(1.522222,2))
print(round(1.566666,2))

# format(m,n)一共显示n位,四舍五入
result <- format(23.123456789, digits = 4)
print(result)

[1] 2
[1] 1
[1] 1.52
[1] 1.57
[1] "23.12"

2.3字符串、向量相关

print(toupper("Runoob")) # 转换为大写
print(tolower("Runoob")) # 转换为小写
print(nchar("中文", type="bytes")) # 统计字节长度
print(nchar("中文", type="char")) # 总计字符数量

# 截取字符串,从 1 到 5
print(substr("123456789", 1, 5)) 
print(substring("123456789", 1, 5))
print(substring("1234567890", 5)) # 截取字符串,从 5 到结束

print(as.numeric("12")) # 将字符串转换为数字
print(as.character(12.34)) # 将数字转换为字符串
# 将数字转为字符串
result <- format(6)
print(result)

print(strsplit("2019;10;1", ";")) # 分隔符拆分字符串
print(gsub("/", "-", "2019/10/1")) # 替换字符串
[1] "RUNOOB"
[1] "runoob"
[1] 4
[1] 2
[1] "12345"
[1] "12345"
[1] "567890"
[1] 12
[1] "12.34"
[1] "6"
[[1]]
[1] "2019" "10"   "1"   

[1] "2019-10-1"
#nchar(x)计算(列表)或字符串的长度
result <- nchar("Google Runoob Taobao")
print(result)
[1] 20
# 宽度为 6 位,不够的在开头添加空格
result <- format(13.7, width = 6)
print(result)

# 左对齐字符串
result <- format("Runoob", width = 9, justify = "l")
print(result)

# 居中显示
result <- format("Runoob", width = 10, justify = "c")
print(result)

# 使用科学计数法显示
result <- format(c(6, 13.14521), scientific = TRUE)
print(result)

# 小数点右边最小显示 5 位,没有的以 0 补充
result <- format(23.47, nsmall = 5)
print(result)
[1] "  13.7"
[1] "Runoob   "
[1] "  Runoob  "
[1] "6.000000e+00" "1.314521e+01"
[1] "23.47000"

3.六种数据类型

3.1向量vector赋值;某元素是否存在;向量的计算(对每个数字单独计算);取出部分项;向量的排序

#求向量的维度
result<-length(c(1,2,3))
print(result)
[1] 3
#向量的生成
v1 <- c(3,1,TRUE,"runoob")
print(v1)
v2 <- c(3,1,2,5)
print(v2)


print(seq(1, 9, 2))#生成从1-9,差为2的等差序列
print(seq(0, 1, length.out=3))#生成从0到1,个数为3的等差数列
print(rep(0, 5))#生成全部元素重复的向量

[1] "3"      "1"      "TRUE"   "runoob"
[1] 3 1 2 5
[1] 1 3 5 7 9
[1] 0.0 0.5 1.0
[1] 0 0 0 0 0

c() 是一个创造向量的函数。

如果参数中有字符串,c()将其中的每一项都用双引号包裹拼接起来,共同赋值给一个变量

如果都是数字,就不包裹

vector1 <- c(1,2,3,4,5)
flag=2%in%vector1
print(flag)

vector<-1:3
flag2=7%in%vector1
print(flag2)
[1] TRUE
[1] FALSE

%in%:用于判断元素是否在向量里,返回布尔值

以上是一维向量赋值的两种方法

a = c(3, 4)
b = c(5, 0)
print(a + b)

print(c(1.1, 1.2, 1.3) - 0.5)
a = c(1,2)
print(a ^ 2)
[1] 8 4
[1] 0.6 0.7 0.8
[1] 1 4
print(a[1:4]) # 取出第 1 到 4 项,包含第 1 和第 4 项

print(a[c(1, 3, 5)]) # 取出第 1, 3, 5 项

print(a[c(-1, -5)]) # 去掉第 1 和第 5 项
[1]  1  2 NA NA
[1]  1 NA NA
[1] 2
a = c(1, 3, 5, 2, 4, 6)
print(sort(a,decreasing=TRUE))#递增排序,返回排序后的值
print(rev(a))#向量逆转
print(order(a))#递增排序,返回的是原先的下标
print(a[order(a)])

[1] 6 5 4 3 2 1
[1] 6 4 2 5 3 1
[1] 1 4 2 5 3 6
[1] 1 2 3 4 5 6

其他

  1. NA占位置,无值,算长度。NULL相当于不存在
  2. 向量可以和数字加减、比大小、
  3. which(条件)可以删选满足条件的下标
  4. all() 用于检查逻辑向量是否全部为 TRUE,any() 用于检查逻辑向量是否含有 TRUE

3.2创建矩阵matrix;矩阵转置;矩阵相乘%*%;矩阵乘除 */;求逆矩阵;矩阵按整行整列操作

#创建矩阵方法1;矩阵转置;矩阵相乘%*%;
M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
print(M)
print(t(M))

t = M %*% t(M)
print(t)

#输出第二列
print(M[,2])
     [,1] [,2] [,3]
[1,]    2    6    5
[2,]    1   10    4
     [,1] [,2]
[1,]    2    1
[2,]    6   10
[3,]    5    4
     [,1] [,2]
[1,]   65   82
[2,]   82  117
[1]  6 10
#矩阵乘除 */
# 创建 2 行 3 列的矩阵
matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
print(matrix1)

matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
print(matrix2)

# 两个矩阵相乘---对应项相乘
result <- matrix1 * matrix2
cat("相乘结果:","\n")
print(result)

# 两个矩阵相除---对应项相除
result <- matrix1 / matrix2
cat("相除结果:","\n")
print(result)
     [,1] [,2] [,3]
[1,]    7   -1    2
[2,]    9    4    3
     [,1] [,2] [,3]
[1,]    6    0    3
[2,]    1    9    2
     [,1] [,2] [,3]
[1,]   42    0    6
[2,]    9   36    6
         [,1]      [,2]      [,3]
[1,] 1.166667      -Inf 0.6666667
[2,] 9.000000 0.4444444 1.5000000

%*% 用于矩阵与它转置的矩阵相乘。

但我认为,t(M)是M的转置,%*%是矩阵相乘

二维矩阵赋值:直接按行输入,指定行列数,byrow=true指按行优先赋值

#创建矩阵的方法2
M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)

colnames(M) = c("x", "y", "z")
rownames(M) = c("a", "b")

print(M)
print(M["a", ])#按照行列名输出元素

  x  y z
a 2  6 5
b 1 10 4
x y z 
2 6 5 
#求逆矩阵
M = matrix( c(1,2,3,4), nrow = 2,ncol = 2,byrow = TRUE)
solve(M)
-2.0 1.0
1.5-0.5
#矩阵按整行整列操作
(A = matrix(c(1, 3, 2, 4), 2, 2))
print(A)
print(apply(A, 1, sum)) # 第二个参数为 1 按行操作,用 sum() 函数
print(apply(A, 2, sum)) # 第二个参数为 2 按列操作
12
34
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[1] 3 7
[1] 4 6

3.3数组array(3维)创建数组;数组按整行整列操作;

#创建数组
# 创建两个不同长度的向量
vector1 <- c(5,9)
vector2 <- c(10,11,12,6)

column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2")
matrix.names <- c("Matrix1","Matrix2")

# 创建一个2行3列2层数组,并设置各个维度的名称
#向量长为6,只够一层矩阵赋值,默认采取循环赋值的方法,于是两层的值相同
result <- array(c(vector1,vector2),dim = c(2,3,2),dimnames = list(row.names,column.names,matrix.names))
print(result)
print(result[2,,2])#2行全部列第2层矩阵
, , Matrix1

     COL1 COL2 COL3
ROW1    5   10   12
ROW2    9   11    6

, , Matrix2

     COL1 COL2 COL3
ROW1    5   10   12
ROW2    9   11    6

COL1 COL2 COL3 
   9   11    6 

赋值的同时,使用 dimnames指定各个维度的名称

array()第一个参数是全部的数据元素,第二个参数表示数组的维度,数组被认为是由多个矩阵堆砌而成

.和类无关,相当于下滑线

对数组的某几层矩阵加减乘除时,先将该层矩阵取出

# 创建数组
new.array <- array(c(c(5,9,3),c(10,11,12,13,14,15)),dim = c(3,3,2))
print(new.array)

# 计算数组中所有矩阵每一行的数字之和
result <- apply(new.array, 1, sum)
print(result)
# 计算数组中所有矩阵每一列的数字之和
result <- apply(new.array, 2, sum)
print(result)
, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

[1] 56 68 60
[1] 34 66 84

3.4列表list:增删改列表;合并列表;列表转向量

# 创建列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),list("runoob",12.3))

# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")

# 显示列表
print(list_data)

# 访问列表元素
print(list_data[1])
print(list_data$Numbers)

# 添加元素
list_data[4] <- "新元素"
print(list_data[4])

# 删除元素
list_data[4] <- NULL
print(list_data[4])
$Sites
[1] "Google" "Runoob" "Taobao"

$Numbers
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

$Lists
$Lists[[1]]
[1] "runoob"

$Lists[[2]]
[1] 12.3


$Sites
[1] "Google" "Runoob" "Taobao"

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
[[1]]
[1] "新元素"

$<NA>
NULL
# 合并列表
merged.list <- c(list(1,2,3),list("Google","Runoob","Taobao"))
print(merged.list)

#unlist()列表转换为向量
v1 <- unlist(list(1,2,3))
print(v1)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] "Google"

[[5]]
[1] "Runoob"

[[6]]
[1] "Taobao"

[1] 1 2 3

3.5因子factor???不太明白

#新建一个因子,类似于一个统计表格中的一整列
sex<-factor(c('male','female','male'))

#查看变量类型
print(class(sex))
#判断某变量是否为因子
print(is.factor(sex))

#查看因子中具体有哪些类型
print(levels(sex))
#查看因子中有几个类
print(nlevels(sex))

[1] "factor"
[1] TRUE
[1] "female" "male"  
[1] 2
#???????????????
#label就是给levels对应位置起名字
fruit=factor(c('apple','pear','banana','apple'),levels=c('apple','pear','banana'),labels=c('苹果','梨','香蕉'),ordered=TRUE)
print(fruit)
[1] 苹果 梨   香蕉 苹果
Levels: 苹果 < 梨 < 香蕉

3.6数据框data.frame(表格)

3.6.1创建数据框;多种方式输出数据框;添加列;

#同一列的数据类型需要一致,不同列的数据类型可以不一样
table = data.frame(
    姓名 = c("张三", "李四"),
    工号 = c("001","002"),
    月薪 = c(1000, 2000)
   
)
print(table) # 查看 table 数据
str(table)# 查看 table 数据

print("---显示概要----")
print(summary(table)) 

print("---提取指定的列----")
result <- data.frame(table$姓名,table$月薪)
print(result)
print("---输出前面1行----")
result <- table[1,]
print(result)
print("---输出前面两列----")
result <- table[,1:2]
print(result)
print("---输出前面两列----")
result <- table[,c(1,2)]
print(result)
  姓名 工号 月薪
1 张三  001 1000
2 李四  002 2000
'data.frame':	2 obs. of  3 variables:
 $ 姓名: Factor w/ 2 levels "李四","张三": 2 1
 $ 工号: Factor w/ 2 levels "001","002": 1 2
 $ 月薪: num  1000 2000
[1] "---显示概要----"
   姓名    工号        月薪     
 李四:1   001:1   Min.   :1000  
 张三:1   002:1   1st Qu.:1250  
                  Median :1500  
                  Mean   :1500  
                  3rd Qu.:1750  
                  Max.   :2000  
[1] "---提取指定的列----"
  table.姓名 table.月薪
1       张三       1000
2       李四       2000
[1] "---输出前面1行----"
  姓名 工号 月薪
1 张三  001 1000
[1] "---输出前面两列----"
  姓名 工号
1 张三  001
2 李四  002
[1] "---输出前面两列----"
  姓名 工号
1 张三  001
2 李四  002
table = data.frame(
    姓名 = c("张三", "李四","王五"),
    工号 = c("001","002","003"),
    月薪 = c(1000, 2000,3000)
)
# 添加列
table$部门 <- c("运营","技术","编辑")

print(table)
  姓名 工号 月薪 部门
1 张三  001 1000 运营
2 李四  002 2000 技术
3 王五  003 3000 编辑

3.6.2向量合并成数据框;

#向量合并成数据框

sites <- c("Google","Runoob","Taobao")
likes <- c(222,111,123)
url <- c("www.google.com","www.runoob.com","www.taobao.com")

# 将向量组合成数据框
addresses <- cbind(sites,likes,url)#如果两个向量用rbind

# 查看数据框
print(addresses)
     sites    likes url             
[1,] "Google" "222" "www.google.com"
[2,] "Runoob" "111" "www.runoob.com"
[3,] "Taobao" "123" "www.taobao.com"

3.6.3表格疑惑中…

# data frame 1
df1 = data.frame(SiteId = c(1:6), Site = c("Google","Runoob","Taobao","Facebook","Zhihu","Weibo"))
print("----- 表1 ------")
print(df1)

# data frame 2
df2 = data.frame(SiteId = c(2, 4, 6, 7, 8), Country = c("CN","USA","CN","USA","IN"))
print("----- 表2 ------")
print(df2)


# INNER JOIN:内连接  对相同的SiteId,融合信息
df1 = merge(x=df1,y=df2,by="SiteId")
print("----- 内连接 -----")
print(df1)

# FULL JOIN:全连接
df2 = merge(x=df1,y=df2,by="SiteId",all=TRUE)
print("----- 全连接 -----")
print(df2)

# LEFT JOIN:左连接
df3 = merge(x=df1,y=df2,by="SiteId",all.x=TRUE)
print("----- 左连接 -----")
print(df3)

# RIGHT :右连接
df4 = merge(x=df1,y=df2,by="SiteId",all.y=TRUE)
print("----- 右连接 -----")
print(df4)
[1] "----- 表1 ------"
  SiteId     Site
1      1   Google
2      2   Runoob
3      3   Taobao
4      4 Facebook
5      5    Zhihu
6      6    Weibo
[1] "----- 表2 ------"
  SiteId Country
1      2      CN
2      4     USA
3      6      CN
4      7     USA
5      8      IN
[1] "----- 内连接 -----"
  SiteId     Site Country
1      2   Runoob      CN
2      4 Facebook     USA
3      6    Weibo      CN
[1] "----- 全连接 -----"
  SiteId     Site Country.x Country.y
1      2   Runoob        CN        CN
2      4 Facebook       USA       USA
3      6    Weibo        CN        CN
4      7     <NA>      <NA>       USA
5      8     <NA>      <NA>        IN
[1] "----- 左连接 -----"
  SiteId   Site.x Country   Site.y Country.x Country.y
1      2   Runoob      CN   Runoob        CN        CN
2      4 Facebook     USA Facebook       USA       USA
3      6    Weibo      CN    Weibo        CN        CN
[1] "----- 右连接 -----"
  SiteId   Site.x Country   Site.y Country.x Country.y
1      2   Runoob      CN   Runoob        CN        CN
2      4 Facebook     USA Facebook       USA       USA
3      6    Weibo      CN    Weibo        CN        CN
4      7     <NA>    <NA>     <NA>      <NA>       USA
5      8     <NA>    <NA>     <NA>      <NA>        IN

3.6.4melt() :宽格式数据转化成长格式。cast() :长格式数据转化成宽格式。

# melt() 和 cast() 函数
# 安装库(安装一次注释掉就行了)
#install.packages("MASS", repos = "https://mirrors.ustc.edu.cn/CRAN/") 
#install.packages("reshape2", repos = "https://mirrors.ustc.edu.cn/CRAN/") 
#install.packages("reshape", repos = "https://mirrors.ustc.edu.cn/CRAN/")

# 载入库
#library(MASS)
library(reshape2)
library(reshape)
 
# 创建数据框
id<- c(1, 1, 2, 2)
time <- c(1, 2, 1, 2)
x1 <- c(5, 3, 6, 2)
x2 <- c(6, 5, 1, 4)
mydata <- data.frame(id, time, x1, x2)
 
# 原始数据框
cat("原始数据框:\n")
print(mydata)
# 整合
md <- melt(mydata, id = c("id","time"))
 
cat("\n整合后:\n")
print(md)
原始数据框:
  id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4

整合后:
  id time variable value
1  1    1       x1     5
2  1    2       x1     3
3  2    1       x1     6
4  2    2       x1     2
5  1    1       x2     6
6  1    2       x2     5
7  2    1       x2     1
8  2    2       x2     4
# 载入库
#library(MASS)
library(reshape2)
library(reshape)
 
# 创建数据框
id<- c(1, 1, 2, 2)
time <- c(1, 2, 1, 2)
x1 <- c(5, 3, 6, 2)
x2 <- c(6, 5, 1, 4)
mydata <- data.frame(id, time, x1, x2)
print("原始数据框---------")
print(mydata)


# 整合
#除了选中的列,其他列都变成了度量变量variable的取值
md <- melt(mydata, id = c("id","time"))
print("整合后的数据-------------")
print(md)

# ~之前的列去重,~之后的列要列出属性值,cast()会整合~后面所有取值下的value情况,mean代表每一项取均值
cast.data <- cast(md, id~variable, mean)
print("id~variable-------------")
print(cast.data)
 

time.cast <- cast(md, time~variable, mean)
print("time~variable------------")
print(time.cast)


id.time <- cast(md, id~time, mean)
print("id~time-----------")
print(id.time)

id.time.cast <- cast(md, id+time~variable)
print("id+time~variable-----------")
print(id.time.cast)


id.variable.time <- cast(md, id+variable~time)
print("id+variable~time-----------")
print(id.variable.time)


id.variable.time2 <- cast(md, id~variable+time)
print("id~variable+time-----------")
print(id.variable.time2)




#作业补充:
#对于一个有多个列的数据框,如果要查看某两列的相关关系,可以如下处理:(数据文件中必须有id列,没有的手动添加,值从1递增)
#现将这两列除外(class和cap.shape是列名)融合,其他的列统统当成度量变量
#md <- melt(data, id = c("id","class","cap.shape"))
#print(md)
#整合,中间的数据全为统计值,(我的统计值是真实个数的某个倍数,可能是度量向量的个数倍)
#cast.data <- cast(md, class~cap.shape)
#print(cast.data)

[1] "原始数据框---------"
  id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
[1] "整合后的数据-------------"
  id time variable value
1  1    1       x1     5
2  1    2       x1     3
3  2    1       x1     6
4  2    2       x1     2
5  1    1       x2     6
6  1    2       x2     5
7  2    1       x2     1
8  2    2       x2     4
[1] "id~variable-------------"
  id x1  x2
1  1  4 5.5
2  2  4 2.5
[1] "time~variable------------"
  time  x1  x2
1    1 5.5 3.5
2    2 2.5 4.5
[1] "id~time-----------"
  id   1 2
1  1 5.5 4
2  2 3.5 3
[1] "id+time~variable-----------"
  id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
[1] "id+variable~time-----------"
  id variable 1 2
1  1       x1 5 3
2  1       x2 6 5
3  2       x1 6 2
4  2       x2 1 4
[1] "id~variable+time-----------"
  id x1_1 x1_2 x2_1 x2_2
1  1    5    3    6    5
2  2    6    2    1    4

4.可以转换成数据框、列表处理的文件

4.1CSV文件,返回数据框:获取/更改工作目录;判断是否为数据框;查看数据框行列数;subset()按条件查找记录;写入CSV文件;

#获取当前工作目录
print(getwd())

#更改当前工作目录
setwd("F:/R_project_ben")

#CSV 用逗号来分割列,并且 CSV 文件最后一行需要保留一个空行,不然执行程序会有警告信息。
#读取文件,返回的是数据框
data<-read.csv("test.csv")
print(data)

# 查看是否是数据框
print(is.data.frame(data))  
print(ncol(data))  # 列数
print(nrow(data))  # 行数

# 查找likes 大于 1 name 为 Runoob 的数据
retval <- subset(data, likes > 1 & name=="菜鸟")
print(retval)

#将记录写入一个新的csv文件
write.csv(retval,"runoob.csv")
newdata <- read.csv("runoob.csv")
print(newdata)

#将记录写入一个新的csv文件的同时,删除某一列
write.csv(retval,"runoob.csv", row.names = FALSE)
newdata <- read.csv("runoob.csv")
print(newdata)
[1] "F:/R_project_ben"
  id name            url likes
1  1 谷歌 www.google.com   111
2  2 菜鸟 www.runoob.com   222
3  3 淘宝 www.taobao.com   333
[1] TRUE
[1] 4
[1] 3
  id name            url likes
2  2 菜鸟 www.runoob.com   222
  X id name            url likes
1 2  2 菜鸟 www.runoob.com   222
  id name            url likes
1  2 菜鸟 www.runoob.com   222

4.2XML文件:统计数据条数;转为列表;转为数据框;

# 安装 XML 包 
#install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/")

#查看是否安装成功:
any(grepl("XML",installed.packages()))

# 载入 XML 包
library("XML")


# 打开同目录下xml文件
result <- xmlParse(file = "test.xml")
print(result)

#统计一共有多少条数据
rootnode <- xmlRoot(result)# 提取根节点,并且可以看做矩阵
rootsize <- xmlSize(rootnode)# 统计数据量
print(rootsize)

print("---------------------------")
# 查看第 2 个节点数据
print(rootnode[2])

print("---------------------------")
# 查看第 2 个节点的第  1 个数据
print(rootnode[[2]][[1]])


print("---------------------------")
# 转为列表
xml_data <- xmlToList(result)
print(xml_data)
print(xml_data[[1]][[2]])#列表也可以像矩阵一样读取

#转为数据框
xmldataframe <- xmlToDataFrame(result)#或xmldataframe <- xmlToDataFrame("test.xml")
print(xmldataframe)

TRUE

<?xml version="1.0"?>
<sites>
  <site>
    <id>1</id>
    <name>Google</name>
    <url>www.google.com</url>
    <likes>111</likes>
  </site>
  <site>
    <id>2</id>
    <name>Runoob</name>
    <url>www.runoob.com</url>
    <likes>222</likes>
  </site>
  <site>
    <id>3</id>
    <name>Taobao</name>
    <url>www.taobao.com</url>
    <likes>333</likes>
  </site>
</sites>
 
[1] 3
[1] "---------------------------"
$site
<site>
  <id>2</id>
  <name>Runoob</name>
  <url>www.runoob.com</url>
  <likes>222</likes>
</site> 

attr(,"class")
[1] "XMLInternalNodeList" "XMLNodeList"        
[1] "---------------------------"
<id>2</id> 
[1] "---------------------------"
$site
$site$id
[1] "1"

$site$name
[1] "Google"

$site$url
[1] "www.google.com"

$site$likes
[1] "111"


$site
$site$id
[1] "2"

$site$name
[1] "Runoob"

$site$url
[1] "www.runoob.com"

$site$likes
[1] "222"


$site
$site$id
[1] "3"

$site$name
[1] "Taobao"

$site$url
[1] "www.taobao.com"

$site$likes
[1] "333"


[1] "Google"
  id   name            url likes
1  1 Google www.google.com   111
2  2 Runoob www.runoob.com   222
3  3 Taobao www.taobao.com   333

4.3json:可以转换为数据框

#安装json
#install.packages("rjson", repos = "https://mirrors.ustc.edu.cn/CRAN/")

# 载入 rjson 包
library("rjson")

# 获取 json 数据
result <- fromJSON(file = "test.json")
print(result)

print("-----获取第 1 行------")
print(result[1])

print("-----获取第 2 行第 2 列------")
print(result[[2]][[2]])

# 转为数据框
json_data_frame <- as.data.frame(result)
print(json_data_frame)
$id
[1] "1" "2" "3"

$name
[1] "Google" "Runoob" "Taobao"

$url
[1] "www.google.com" "www.runoob.com" "www.taobao.com"

$likes
[1] 111 222 333

[1] "-----获取第 1 行------"
$id
[1] "1" "2" "3"

[1] "-----获取第 2 行第 2 列------"
[1] "Runoob"
  id   name            url likes
1  1 Google www.google.com   111
2  2 Runoob www.runoob.com   222
3  3 Taobao www.taobao.com   333
a <- "Google"
b <- 'Runoob'
c <- "Taobao"

#默认空格拼接
print(paste(a,b,c))
#指定符号拼接
print(paste(a,b,c, sep = "-"))
#指定符号拼接且编号
print(paste(letters[1:6],1:6, sep = "", collapse = "="))
[1] "Google Runoob Taobao"
[1] "Google-Runoob-Taobao"
[1] "a1=b2=c3=d4=e5=f6"

5.绘图

5.1字体:下面用到family='字体’时,先执行此段代码,再在该文件中showtext_begin();

#install.packages("showtext", repos = "https://mirrors.ustc.edu.cn/CRAN/")  # 安装 showtext
library(showtext)
# font_files()   # 查看windows支持的字体
#使用之前要先将字体加入
font_add('Arial', 'arial.ttf')

5.2饼图 pie();pie3D();

#直接绘图
info = c(1, 2, 4, 8)#数据准备,注意:必须是数字
names = c("Google", "Runoob", "Taobao", "Weibo")# 在饼图上显示的文字
cols = c("#ED1C24","#22B14C","#FFC90E","#3f48CC")# 涂色
pie(info, labels=names, col=cols,, main = "网站分析")# 绘图
legend("topright", names, cex=0.8, fill=cols)# 添加颜色样本标注

#csv文件统计后绘图
#方法1
#data<-read.csv("Mushroom.csv")
#pie(table(data[,2]))
#方法2
#m=lapply(data,function (x) table(x)/length(x))
#pie(m$列名)

#3D饼图
#install.packages("plotrix", repos = "https://mirrors.ustc.edu.cn/CRAN/")

# 载入 plotrix
library(plotrix)
# 绘制 3D 图,family 要设置你系统支持的中文字体库
pie3D(info,labels = names,explode = 0.1, main = "3D 图")

在这里插入图片描述
在这里插入图片描述

5.3条形图barplot():数据可以是向量,也可以是矩阵

# 准备一个向量
cvd19 = c(1,3,2)

# 显示条形图
barplot(cvd19,main="新冠疫情条形图",col=c("#ED1C24","#22B14C","#FFC90E"),names.arg=c("中国","美国","印度"))

在这里插入图片描述

#创建一个矩阵
cvd19 = matrix(c(83017, 83534, 1794546, 2640626, 190535, 585493),2, 3)

#加载字体
showtext_begin();

colnames(cvd19) = c("中国", "美国", "印度")
rownames(cvd19) = c("6月", "7月")
barplot(cvd19, main = "新冠疫情条形图", beside=TRUE, legend=TRUE,col=c("blue","green"), family='Arial')

# 去掉字体
showtext_end();

在这里插入图片描述

5.4函数图像curve();plot():简单函数;分段函数;折线图;散点图;散点图矩阵pairs();

#参数为:函数表达式,区间
curve(sin(x), -2 * pi, 2 * pi)

在这里插入图片描述

#对分段函数绘图
# 定义函数 f
f = function (x) {
    if (x >= 0) {
        x
    } else {
        x ^ 2
    }
}

x = seq(-2, 2, length=100)# 生成自变量序列:从-2~ 2,长度为100的等差序列
y = rep(0, length(x))# 生成因变量序列:全部元素重复的向量

j = 1
for (i in x) {
    y[j] = f(i)
    j = j + 1
}

# 绘制图像:type:绘图的类型,p 为点、l 为直线, o 同时绘制点和线,且线穿过点
plot(x, y, type='l')

在这里插入图片描述

#折线图、散点图
# 只给一个向量:#只给一个向量,默认为纵坐标,横坐标默认为1,2,3....
v <- c(7,12,28,3,41)

# 绘图、线图颜色为红色,main 参数用于设置标题
#type:绘图的类型,p 为点、l 为直线, o 同时绘制点和线,且线穿过点
plot(v,type = "l", col = "red", xlab = "Month", ylab = "Rain fall",main = "Rain fall chart")
plot(v,type = "o")
plot(v,type = "p")

#给x,y两个向量
x<-c(10,30,40,45)
y<-c(20,40,60,25)
plot(x, y, "p")

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# 利用内置数据集生成散点图
input <- mtcars[,c('wt','mpg')]

# 设置坐标 x 轴范围 2.5 到 5, y 轴范围 15 到 30.
plot(x = input$wt,y = input$mpg,
   xlab = "Weight",
   ylab = "Milage",
   xlim = c(2.5,5),
   ylim = c(15,30),              
   main = "Weight vs Milage"
)

# 4 个变量绘制矩阵,12 个图(暂不明白意义何在)
pairs(~wt+mpg+disp+cyl,data = mtcars, main = "Scatterplot Matrix")

在这里插入图片描述
在这里插入图片描述

标签:www,语言,Runoob,笔记,学习,-----,print,com,id
来源: https://blog.csdn.net/floracuu/article/details/114880855

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有