精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
R語言學習筆記

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")


來源:https://www.icode9.com/content-4-893501.html
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python3 元組 | 菜鳥教程
python基本數據結構
python基礎
Python系列(8)——那些“禍亂”你心智的語法(四)
Java 8 新特性
Vue3 表單 | 菜鳥教程
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 武威市| 临安市| 景泰县| 图们市| 福海县| 德庆县| 海原县| 房山区| 台前县| 抚松县| 抚州市| 青川县| 凭祥市| 化州市| 德保县| 张家界市| 洞头县| 玉龙| 高邑县| 印江| 远安县| 施甸县| 日土县| 察隅县| 江山市| 苏尼特右旗| 梧州市| 错那县| 河津市| 张家港市| 南充市| 平利县| 和平县| 平乐县| 应城市| 缙云县| 皋兰县| 大田县| 华蓥市| 永兴县| 金湖县|