#查看包的安裝目錄
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"
# 當前工作目錄
print(getwd())
# 設置當前工作目錄
setwd("E:/projectR_test")
# 查看當前工作目錄
print(getwd())
[1] "E:/projectR_test"
[1] "E:/projectR_test"
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()用于釋放已定義的變量
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
其他-----------------------------
注釋:單行 '多行’ “多行”
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內置向量
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()的第一個參數如果是數字,返回后面的值,此時返回第三個
如果是字符串,返回字符串對應的值
func1 <- function(a) {
print(a)
}
# 調用函數,并傳遞參數
func1(6)
[1] 6
R語言對于計算是懶惰的,即使調用時沒有傳參,如果函數內沒有使用也不會報錯
#三角函數:弧度制
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"
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"
#求向量的維度
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;矩陣轉置;矩陣相乘%*%;
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 按列操作
1 | 2 |
3 | 4 |
[,1] [,2]
[1,] 1 2
[2,] 3 4
[1] 3 7
[1] 4 6
#創建數組
# 創建兩個不同長度的向量
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
# 創建列表包含向量、矩陣、列表
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
#新建一個因子,類似于一個統計表格中的一整列
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: 蘋果 < 梨 < 香蕉
#同一列的數據類型需要一致,不同列的數據類型可以不一樣
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 編輯
#向量合并成數據框
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"
# 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
# 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
#獲取當前工作目錄
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
# 安裝 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
#安裝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"
#install.packages("showtext", repos = "https://mirrors.ustc.edu.cn/CRAN/") # 安裝 showtext
library(showtext)
# font_files() # 查看windows支持的字體
#使用之前要先將字體加入
font_add('Arial', 'arial.ttf')
#直接繪圖
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 圖")
# 準備一個向量
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();
#參數為:函數表達式,區間
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")